MySQL dispone de multitud de operadores diferentes para cada uno de los tipos de columna. Esos operadores se utilizan para construir expresiones que se usan en cláusulas ORDER BY y HAVING de la sentencia SELECT y en las cláusulas WHERE de las sentencias SELECT, DELETE y UPDATE. Además se pueden emplear en sentencias SET.
En MySQL podemos crear variables y usarlas porteriormente en expresiones.
Para crear una variable hay dos posibilidades. La primera consiste en ulsar la sentencia SET de este modo:
mysql> SET @hoy = CURRENT_DATE(); Query OK, 0 rows affected (0.02 sec) mysql> SELECT @hoy; +------------+ | @hoy | +------------+ | 2005-03-23 | +------------+ 1 row in set (0.00 sec) mysql>
La otra alternativa permite definir variables de usuario dentro de una sentencia SELECT:
mysql> SELECT @x:=10; +--------+ | @x:=10 | +--------+ | 10 | +--------+ 1 row in set (0.00 sec) mysql> SELECT @x; +------+ | @x | +------+ | 10 | +------+ 1 row in set (0.00 sec) mysql>
En esta segunda forma es donde se usa el operador de asignación :=. Otros ejemplos del uso de variables de usuario pueden ser:
mysql> SELECT @fecha_min:=MIN(fecha), @fecha_max:=MAX(fecha) FROM gente; +------------------------+------------------------+ | @fecha_min:=MIN(fecha) | @fecha_max:=MAX(fecha) | +------------------------+------------------------+ | 1978-06-15 | 2001-12-02 | +------------------------+------------------------+ 1 row in set (0.00 sec) mysql> SELECT * FROM gente WHERE fecha=@fecha_min; +----------+------------+ | nombre | fecha | +----------+------------+ | Mengano | 1978-06-15 | | Pimplano | 1978-06-15 | +----------+------------+ 2 rows in set (0.00 sec) mysql>
Una variable sin asignar será de tipo cadena y tendrá el valor NULL.
Los operadores lógicos se usan para crear expresiones lógicas complejas. Permiten el uso de álgebra booleana, y nos ayudarán a crear condiciones mucho más precisas.
En el álgebra booleana sólo existen dos valores posibles para los operandos y los resultados: verdadero y falso. MySQL dispone de dos constantes para esos valores: TRUE y FALSE, respectivamente.
MySQL añade un tercer valor: desconocido. Esto es para que sea posible trabajar con valores NULL. El valor verdadero se implementa como 1 o TRUE, el falso como 0 o FALSE y el desconocido como NULL.
mysql> SELECT TRUE, FALSE, NULL; +------+-------+------+ | TRUE | FALSE | NULL | +------+-------+------+ | 1 | 0 | NULL | +------+-------+------+ 1 row in set (0.00 sec) mysql>
En MySQL se puede usar tanto la forma AND como &&, es decir, ambas formas se refieren al mismo operador: Y lógico.
Se trata de un operador binario, es decir, require de dos operandos. El resultado es verdadero sólo si ambos operandos son verdaderos, y falso si cualquier operando es falso. Esto se representa mediante la siguiente tabla de verdad:
A | B | A AND B |
---|---|---|
falso | falso | falso |
falso | verdadero | falso |
verdadero | falso | falso |
verdadero | verdadero | verdadero |
falso | NULL | falso |
NULL | falso | falso |
verdadero | NULL | NULL |
NULL | verdadero | NULL |
Al igual que todos lo operadores binarios que veremos, el operador Y se puede asociar, es decir, se pueden crear expresiones como A AND B AND C. El hecho de que se requieran dos operandos significa que las operaciones se realizan tomando los operandos dos a dos, y estas expresiones se evalúan de izquierda a derecha. Primero se evalúa A AND B, y el resultado, R, se usa como primer operando de la siguiente operación R AND C.
mysql> SELECT 1 AND 0, 1 AND NULL, 0 AND NULL, 1 AND 0 AND 1; +---------+------------+------------+---------------+ | 1 AND 0 | 1 AND NULL | 0 AND NULL | 1 AND 0 AND 1 | +---------+------------+------------+---------------+ | 0 | NULL | 0 | 0 | +---------+------------+------------+---------------+ 1 row in set (0.00 sec) mysql>
En MySQL este operador también tiene dos formas equivalentes OR y ||
El operador O también es binario. Si ambos operandos son distintos de NULL y el resultado es verdadero si cualquiera de ellos es verdadero, y falso si ambos son falsos. Si uno de los operandos es NULL el resultado es verdadero si el otro es verdadero, y NULL en el caso contrario. La tabla de verdad es:
A | B | A OR B |
---|---|---|
falso | falso | falso |
falso | verdadero | verdadero |
verdadero | falso | verdadero |
verdadero | verdadero | verdadero |
falso | NULL | NULL |
NULL | falso | NULL |
verdadero | NULL | verdadero |
NULL | verdadero | verdadero |
mysql> SELECT 1 OR 0, 1 OR NULL, 0 OR NULL, 1 OR 0 OR 1; +--------+-----------+-----------+-------------+ | 1 OR 0 | 1 OR NULL | 0 OR NULL | 1 OR 0 OR 1 | +--------+-----------+-----------+-------------+ | 1 | 1 | NULL | 1 | +--------+-----------+-----------+-------------+ 1 row in set (0.00 sec) mysql>
XOR también es un operador binario, que devuelve NULL si cualquiera de los operandos es NULL. Si ninguno de los operandos es NULL devolverá un valor verdadero si uno de ellos es verdadero, y falso si ambos son verdaderos o mabos falsos. La tabla de verdad será:
A | B | A XOR B |
---|---|---|
falso | falso | falso |
falso | verdadero | verdadero |
verdadero | falso | verdadero |
verdadero | verdadero | falso |
falso | NULL | NULL |
NULL | falso | NULL |
verdadero | NULL | NULL |
NULL | verdadero | NULL |
mysql> SELECT 1 XOR 0, 1 XOR NULL, 0 XOR NULL, 1 XOR 0 XOR 1; +---------+------------+------------+---------------+ | 1 XOR 0 | 1 XOR NULL | 0 XOR NULL | 1 XOR 0 XOR 1 | +---------+------------+------------+---------------+ | 1 | NULL | NULL | 0 | +---------+------------+------------+---------------+ 1 row in set (0.00 sec) mysql>
El operador NOT, que también se puede escribir como !, es un operador unitario, es decir sólo afecta a un operando. Si el operando es verdadero devuelve falso, y viceversa. Si el operando es NULL el valor devuelto también es NULL.
A | NOT A |
---|---|
falso | verdadero |
verdadero | falso |
NULL | NULL |
mysql> SELECT NOT 0, NOT 1, NOT NULL; +-------+-------+----------+ | NOT 0 | NOT 1 | NOT NULL | +-------+-------+----------+ | 1 | 0 | NULL | +-------+-------+----------+ 1 row in set (0.02 sec) mysql>
© Marzo de 2005 Salvador Pozo, salvador@conclase.net