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.