MySQL - Operadores y funciones de comparación

1. Introducción

En este artículo se explicarán los diversos operadores y funciones de comparación que contiene MySQL.

Va dirigido los usuarios que tenga un nivel de principiante respecto a MySQL y el lenguaje SQL básicamente, aunque tal vez hay algún apartado que sea de interés para usuarios de niveles superiores.

El orden de explicación de cada operador será el que se indica en los contenidos de este artículo, que a mi entender es un orden de difictuldad ascendente.

2. Operadores de comparación

Los operadores de comparación, como su nombre indica, son aquellos operadores destinados a comparar dos expresiones o valores y que tienen como resultado un valor booleano, ya sea 1 (true) ó 0 (false) aunque también puede devolver NULL. Estos operadores sirven básicamente para optimizar las consultas que queramos realizar.

Cuando digo optimizar me refiero al filtrado de los datos de una base de datos. Los operadores de comparación se suelen utilizar en la cláusula WHERE con la siguiente sintaxis:

mysql> SELECT campo1, campo2, ...
FROM tabla, ...
WHERE expresión1 OPERADOR expresión2;

Aunque también es posible utilizar los operadores de comparación en la cláusula SELECT con la siguiente sintaxis:

mysql> SELECT expresión1 OPERADOR valor expresión2;

A continuación una tabla de los operadores y funciones de comparación que aquí se verán:

Operador     Significado
=            Igual a
>            Mayor que
>=           Mayor que o igual a
<            Menor que
<=           Menor que o igual a
<>, !=       Diferente a
IS booleano    Es 1,0 o NULL
IS NULL        Es nulo
BETWEEN        Entre dos valores (inclusive)
IN             Lista de valores
LIKE                Se ajusta a un patrón
REGEXP, RLIKE    Se ajusta a un patrón (expresiones regulares)
GREATEST      Mayor argumento
LEAST         Menor argumento
STRCMP        Compara dos cadenas

Ahora explicaré cada uno de estos operadores y funciones por separado pero antes hay que destacar un par de puntos bastante importantes en cuanto a comparaciones entre literales y numéricos.

Para empezar las expresiones o valores literales, es decir cualquier carácter o cadenas de caracteres, vienen representadas entre comillas simples ('') y en cambio los valores numéricos no se deben poner entre comillas. Otro punto bastante importante es la insensibilidad de MySQL ante las mayúsculas y minúsculas. MySQL no diferencia entre mayúsculas y minúsculas a no se que se lo expresemos explícitamente con la función BINARY, aquí va un ejemplo:

mysql> SELECT 'b' = 'B';

Esta sentencia daría como resultado 1 (true) y aquí se puede comprobar la insensibilidad ante las mayúsculas y minúsculas y ahora un ejemplo con BINARY:

mysql> SELECT BINARY 'b' = 'B';
Y esta sentencia da como resultado 0 (false) ya que el código ASCII de 'b' (que es 98) es diferente al código ASCII de 'B' (que es 66).

Un factor más a destacar en las comparaciones con MySQL es que si se compara un literal (que se compone de dígitos numéricos como puede ser, '125') con un numérico se hace una especie de conversión forzosa, la cual hace que las dos expresiones o valores a comparar sean de la misma topología, un ejemplo:

mysql> SELECT '125' = 125;

Esta sentencia da como resultado 1 (true) por lo que he comentado anteriormente. Una vez teniendo todo esto en cuenta, ya podemos comenzar a explicar cada uno de los operadores y funciones de comparación.

3. Igual a (=)

Bien... pues comencemos por el operador que creo que es más fácil y el que si habeis realizado alguna vez una consulta, aunque fuese sencillita, seguramente ya habreis tocado este operador. Hablo del operador "Igual a" (=), este operador compara las dos expresiones o valores y nos devuelve como resultado: 1 (true) si las dos expresiones o valores son iguales ó 0 (false) si las dos expresiones o valores son diferentes entre ellas. Se utiliza con el símbolo "=".

Aquí va un ejemplo y después una explicación sobre él:

mysql> SELECT * FROM tabla WHERE campo = 1;

En esta sentencia se seleccionará todos los campos (*) de tabla donde la comparación de campo = 1 sea cierta. También lo podemos utilizar con valores literales:

mysql> SELECT * FROM tabla WHERE campo = 'Juan';

Aquí la sentencia selecciona todos los campos (*) de tabla donde campo tenga el valor de 'Juan'.

4. Mayor que (>)

Seguiremos con otro operador de igual dificultad que el anterior, esta vez hablo del operador "Mayor que" (>).

Éste también compara las dos expresiones o valores (como en cualquier operador que veremos), pero nos dará como resultado 1 (true) cuando el valor de la primera expresión sea mayor que el valor de la segunda expresión y nos dará como resultado 0 (false) cuando el valor de la primera expresión sea menor que el valor de la segunda expresión. También nos dará como resultado 0 (false) cuando los valores de las dos expresiones sean iguales. En cuanto a los literales con este operador, cabe decir que sino se lo indicamos explícitamente con la funcion BINARY no compara valor del código ASCII, es decir que será lo mismo 'a' que 'A'.

Se utiliza con el símbolo ">".

Ejemplos:

mysql> SELECT * FROM tabla WHERE campo > 12;

La sentencia anterior nos devolverá todos los campos (*) de tabla donde campo sea mayor que 12.

mysql> SELECT * FROM tabla WHERE campo > 'a';

Ésta nos devuelve todos los campos (*) de tabla donde campo sea mayor que 'a' y como no le hemos indicado explícitamente el BINARY también donde campo sea mayor que 'A'.

5. Mayor que o igual a (>=)

Prosigamos con el operador "Mayor que o igual a" (>=), bien pues con este operador se realiza básicamente lo mismo que en el anterior (Mayor que), pero cuando los valores de las dos expresiones son iguales en lugar de devolver 0 (false), devuelve 1 (true). Es la única diferencia entre estos dos operadores.

Se utiliza con el símbolo ">=".

Ejemplos:

 mysql> SELECT * FROM tabla WHERE campo >= 9;

En esta sentencia se seleccionan todos los campos (*) de tabla donde el valor de campo sea mayor que 9 o igual a 9.

mysql> SELECT * FROM tabla WHERE campo >= 'B';

Y en esta sentencia se seleccionan todos los campos (*) de tabla donde el valor de campo sea mayor que 'B' o igual a 'B', y acordémonos que MySQL es insensible a las mayúsculas y minúsculas así que también se seleccionarán aquellos campos donde campo sea mayor que 'b' o igual que 'b'.

6. Menor que (<)

El operador de comparación "Menor que" (<) compara las dos expresiones o valores y de esta comparación obtendremos como resultado: 1 (true) si el valor de la primera expresión es menor al valor de la segunda expresión, 0 (false) si el valor de la primera expresión es mayor al valor de la segunda expresión y si los valores de las dos expresiones son coincidentes.

Se utiliza con el símbolo "<".

Ejemplos:

mysql> SELECT * FROM tabla WHERE campo < 27;

Con esta sentencia seleccionamos todos los campos (*) de tabla donde el valor de campo sea menor que 27.

mysql> SELECT * FROM tabla WHERE campo < 'c';

Ésta selecciona todos los campos (*) de tabla donde el valor de campo sea menor que 'c'.

7. Menor que o igual a (<=)

El operador "Menor que o igual a" (<=) realiza básicamente lo mismo que en el anterior (Menor que), pero cuando los valores de las dos expresiones son iguales en lugar de devolver 0 (false), devuelve 1 (true). Es la única diferencia entre ambos.

Se utiliza con el símbolo "<=".

Ejemplos:

mysql> SELECT * FROM tabla WHERE campo <= 5;

En esta sentencia se seleccionan todos los campos (*) de tabla donde el valor de campo sea menor que 5 o igual a 5.

mysql> SELECT * FROM tabla WHERE campo <= 'B';

Y en esta sentencia se seleccionan todos los campos (*) de tabla donde el valor de campo sea menor que 'B' o igual a 'B' y también se seleccionarán aquellos campos donde campo sea menor que 'b' o igual que 'b'.

8. Diferente a (<>, !=)

Ahora vamos con el operador "Diferente a" (<>,!=), este operador se utiliza para saber si una expresión o valor es diferente a la otra expresión o valor. El resultado de la comparación con el operador "Diferente a" (<>,!=) nos devolverá: 1 (true) cuando las expresiones sean diferentes, es decir no coincidan; y nos devolverá 0 (false) cuando las expresiones coincidan.

Se puede utilizar con dos símbolos: <> o != y es indiferente cual se utilice.

Ejemplos:

mysql> SELECT * FROM tabla WHERE campo <> 'Pedro';

Con esta sentencia seleccionamos todos los campos (*) de tabla donde el valor de campo sea diferente al literal 'Pedro'.

mysql> SELECT * FROM tabla WHERE campo != 10;

Y con esta otra, seleccionamos todos los campos (*) de tabla donde el valor de campo sea diferente a 10.

9. IS

Con el operador "IS" lo que hacemos es comparar una expresión o valor con un valor booleano, el cual puede ser TRUE (verdadero), FALSE (falso) o UNKNOWN.

9.1. IS TRUE

"IS TRUE", con este operador junto al booleano 'TRUE' comparamos que la expresión o valor sea 'TRUE', dando como resultado 1 (true) si la expresión o valor es 'TRUE' y como resultado 0 (false) si la expresión o valor es 'FALSE' o 'NULL'. Ejemplo:

mysql> SELECT * FROM tabla WHERE campo IS TRUE;

Esta sentencia nos seleccionará todos los campos (*) de tabla donde campo sea cierto.

9.2. IS FALSE

"IS FALSE", es el antónimo de "IS TRUE". Este operador compara que la expresión o valor sea 'FALSE', dando como resultado 1 (true) si la expresión o valor es 'FALSE' y como resultado 0 (false) si la expresión o valor es 'TRUE' o 'NULL'. Ejemplo:

mysql> SELECT * FROM tabla WHERE campo IS FALSE;

Esta sentencia nos seleccionará todos los campos (*) de tabla donde campo sea falso.

9.3. IS NULL

Con el operador "IS NULL" comparamos que la expresión o valor sea nula, dando como resultado 1 (true) en caso de que sí sea nula ó 0 en caso de que la expresión o valor no sea nula. Ejemplo:

mysql> SELECT * FROM tabla WHERE campo IS NULL;

Esta sentencia nos seleccionará todos los campos (*) de tabla donde campo sea nulo.

10. GREATEST

Con GREATEST tenemos la posibilidad de comparar a varios argumentos y nos devolverá el que sea mayor de todos estos argumentos. Se utiliza con la siguiente sintaxis:

GREATEST(valor1,valor2,valor3,...)

Ejemplo:

 mysql> SELECT GREATEST(10,20,34,543,4,76);

Esta SELECT nos devolverá el número 543 ya que es el mayor de todos los valores que hay en GREATEST.

11. LEAST

LEAST es lo contrario que GREATEST, es decir compara a varios argumentos y nos devuleve el que sea menor de todos. Se utiliza con la siguiente sintaxis:

 LEAST(valor1,valor2,valor3,...)

Ejemplo:

mysql> SELECT LEAST(10,20,34,543,4,76);

Esta SELECT nos devuelve el número 4 por ser el menor de todos los valores que hay en LEAST.

12. IN

Prosigamos con el operador IN, el cual utilizamos para comparar una expresión o valor con una lista de valores. Nos da como resultado 1 (true) cuando la expresión o valor se encuentra en la lista de valores y nos da 0 (false) cuando no se encuentra. Se utiliza con la siguiente sintaxis:

IN(valor1,valor2,valor3,...)

Ejemplo:

 mysql> SELECT * FROM tabla WHERE campo IN(1,3,5,7,9);

Con esta sentencia seleccionamos todos los campos (*) de tabla donde el valor de campo se encuentre dentro de la lista (1,3,5,7,9).

13. BETWEEN

Ahora toca este operador que es bastante conocido también y es BETWEEN, se utiliza para comparar una expresión o valor con un rango de valores inclusive los valores que limitan este rango. La comparación con BETWEEN devuelve 1 (true) cuando la expresión o valor están dentro del rango y devuelve 0 (false) cuando no lo están. Se utiliza en la cláusula WHERE con la siguiente sintaxis:

 BETWEEN valor_mínimo AND valor_máximo;

Ejemplo:

 mysql> SELECT * FROM tabla WHERE campo BETWEEN 10 AND 20;

Seleccionamos todos los campos (*) de tabla donde campo esté entre 10 y 20 ambos icluídos.

14. STRCMP

STRCMP es una función de comparación de dos cadena de caracteres. A muchos ya os sonará si habeis tocado algun que otro lenguaje de programación como C o PHP y funciona muy similar, por no decir igual, a las funciones de estos lenguajes. Esta función nos devuelve el valor 0 cuando las dos cadenas de caracteres a comparar son exactamente igual, nos devuelve -1 cuando la primera cadena de caracteres tiene un valor más pequeño que la segunda cadena de caracteres y por último, nos devuelve 1 cuando la primera cadena de caracteres tiene un valor mayor que la segunda cadena de caracteres. Se utiliza de la siguiente forma:

 STRCMP('cadena1','cadena2')

Ejemplo:

 mysql> SELECT STRCMP('cadena1','cadena');

Nos devolverá un 1 ya que la primera cadena contiene más caracteres y entonces su código ASCII es superior al de la segunda cadena (cadena) que no contienen tantos caracteres.

NOTA: Esta función compara los códigos ASCII que tiene cada caracter, pero si no se le indica con la función BINARY.. tomará igual la 'a' que la 'A' siendo en realidad diferentes códigos ASCII.

Ejemplo con BINARY:

 mysql> SELECT STRCMP(BINARY 'a', 'A');

Aquí nos dará como resultado un 1 ya que el código ASCII de 'a' es mayor al código ASCII de 'A', en cambio si no hubiesemos puesto el BINARY nos hubiese dado como resultado un 0.

15. LIKE

Bueno... LIKE también es una función de comparación entre una cadena de caracteres y un patrón que nosotros imponemos. Esta función es bastante utilizada por la sencillez de sólo tener 2 comodines (%,_). Devuelve 1 (true) cuando la cadena de caracteres comparada se rige por el patrón impuesto y devuelve 0 cuando no lo hace. También dará como resultado NULL si la cadena que queremos comparar es NULL. Su sintaxis es la siguiente:

cadena LIKE patrón [ESCAPE 'carácter_escape']

ESCAPE 'carácterescape' sirve para cuando queramos indicar en el patrón que la cadena debe contener o el símbolo de porcentaje % o , al ser comodines debemos indicarle que en ese momento no serán comodices y esto lo conseguimos con el carácter de escape. Ejemplo:

mysql> SELECT * FROM tabla WHERE campo LIKE 'Pe%\_dro';

mysql> SELECT * FROM tabla WHERE campo LIKE 'Pe%._dro' ESCAPE '.';

En ambas sentencias selecionamos todos los campos de tabla cuando campo se rija con el patrón. En la primera sentencia utilizamos el carácter de escape por defecto que es '\' y en la segunda sentencia le indicamos cual queremos que sea nuestro carácter de escape, en este caso '.'.

15.1. Comodines

Para que el patrón del LIKE sea más efectivo existen dos tipos de comodines como ya hemos dicho antes: Uno de ellos es el símbolo de porcentaje (%), el cual representa a cualquier secuencia de cero o más caracteres. También está el comodín (_), que éste representa a un solo carácter.

16. REGEXP, RLIKE

Por último una función muy parecida a LIKE pero en lugar de utilizar los comodines % y _, se utilizan expresiones regulares. Esta función se puede llamar de dos formas: REGEXP o RLIKE, es indiferente cual se utilice pues la función es la misma. Devuelve 1 si la cadena de caracteres a comparar coincide con el patrón y 0 sino coincide. También dará como resultado NULL si la cadena que queremos comparar es NULL. La sintaxis de REGEXP o RLIKE:

 cadena REGEXP patrón

Un ejemplo de REGEXP:

mysql> SELECT 'hola' REGEXP 'ˆ[h-z]*'

La SELECT nos devolverá 1 ya que la cadena coincide con el patrón. No explico más sobre esta función porque no entiendo de expresiones regulares, era para dar una idea de que también se podían utilizar en MySQL.

2005 © ziRuz - Todos los derechos reservados Para PHP-Hispano.NET.

Resumen

Artículo donde se explican los diversos operadores y funciones de comparación que contiene MySQL. Dirigido principalmente a principiantes en el uso de MySQL.

Índice

  1. Operadores de comparación

Otros artículos