Especificar criterio de recuperación en MySQL

Para limitar el conjunto de filas recuperado por SELECT, debe usar una cláusula WHERE que especifique criterios para seleccionar filas. Para ello, puede buscar valores de columna que cumplan dichos criterios y distintos tipos de valores. Por ejemplo, puede buscar valores numéricos concretos:

mysql> SELECT * FROM score WHERE score > 95;

student_id event_id score
5 3 97
18 3 96
1 6 100
5 6 97
11 6 98
16 6 98

Puede buscar cadenas que contengan datos de caracteres. Para el conjunto de caracteres predeterminado y el orden, las comparaciones de cadena no distinguen entre mayúsculas y minúsculas:

mysql> SELECT last_name, first_name FROM president
-> WHERE last_name='ROOSEVELT';

last_name first_name
Roosevelt Theodore
Roosevelt Franklin D.

mysql>SELECT last_name, first_name FROM president
-> WHERE last_name='roosevelt'
last_name first_name
Roosevelt Theodore
Roosevelt Franklin D.

Puede buscar fechas:

mysql> SELECT last_name, first_name, bitrh FROM president
-> WHERE birth < '1750-1-1';

last_name first_name birth
Washington George 1732-02-22
Adams John 1735-10-30
Jefferson Thomas 1743-04-13

También puede buscar combinaciones de valores:

mysql> SELECT last_name, first_name, birth, state FROM president
-> WHERE birth < '1750-1-1' AND (state='VA' OR state='MA');

last_name first_name birth state
Washington George 1732-02-22 VA
Adams John 1735-10-30 MA
Jefferson Thomas 1743-04-13 VA

Las expresiones de cláusulas WHERE pueden utilizar operadores aritméticos (véase la tabla 1.1), de comparación (véase la tabla 1.2) y lógicos (véase la tabla 1.3). También puede emplear paréntesis para agrupar partes de una expresión. Las operaciones se pueden realizar con constantes, columnas de tablas e invocaciones de funciones.

Tabla 1.1. Operadores aritméticos.

Operador Significado
* Multiplicación
/ División
DIV División de enteros
% Módulo (resto de una división).

Tabla 1.2. Operadores de comparación

Operador Significado
< Menor que.
<= Menor o igual que.
= Igual que.
<=> Igual que (funciona incluso con valores NULL).
<> o != No igual que.
>= Mayor o igual que.
> Mayor que.

Tabla 1.3. Operadores lógicos

Operador Significado
AND Y lógico.
OR O lógico.
XOR O lógico exclusivo.
NOT Negación lógica.

Cuando desee formular una instrucción mediante operadores lógicos, no debe confundir el significado del operador AND lógico con el empleo de «y». Imagine, por ejemplo, que desea buscar los presidentes nacidos en el estado de Virginia y los presidentes que hayan nacido en Massachusetts. Esta condición se expresa con «y», por lo que escribiría la instrucción de esta forma:

mysql> SELECT last_name, first_name, state FROM president
-> WHERE state='VA' AND state='MA';
Empty set (0.36 sec)

Es evidente que por el resultado vacío que la instrucción no es correcta. ¿Por qué? Porque realmente significa «Seleccionar los presidentes nacidos tanto en Virginia como en Massachusetts», lo que no tiene sentido. En SQL, las dos condiciones se expresan con OR:

mysql> SELECT last_name, firs_name, state FROM president
-> WHERE state='VA' OR state='MA';

last_name first_name state
Washington George VA
Adams John MA
Jefferson Thomas VA
Madison James VA
Monroe James VA
Adams John Quincy MA
Harrison William H. VA
Tyler John VA
Taylor zachary VA
Wilson Woodrow VA
Kennedy John F. MA
Bush George H.W. MA

Debe recordar esta diferencia entre el lenguaje normal y SQL, no sólo al formular consultas personalmente sino también al hacerlo para otros. Conviene escuchar atentamente lo que desean recuperar pero no transcribir sus descripciones en SQL con los mismos operadores lógicos. Para el ejemplo anterior, el equivalente normal sería «Seleccionar presidentes nacidos en Virginia o en Massachusetts».
Le resultará más sencillo utilizar el operador IN() al formular este tipo de consultas, para buscar entre varios valores. La consulta anterior se podría escribir de esta forma:

SELECT last_name, first_name, state FROM president WHERE state IN('VA', 'MA');

IN() resulta especialmente útil a la hora de comparar una columna con un elevado número de valores.

Comparte