En una instrucción SQL, la cláusula WHERE especifica criterios que tienen que cumplir los valores de campo para que los registros que contienen los valores se incluyan en los resultados de la consulta.
Aparece
obligatoriamente después de SELECT [lista de campos] FROM [lista de tablas] WHERE
Después de
WHERE podemos añadir los operadores necesarios
Operadores condicionales: =, !=, <, >, <= , >=
Símbolo de distinto puede
ser != o <>
Por ejemplo
SELECT * FROM nombre_tabla WHERE campo
<> 1999
SELECT * FROM nombre_tabla WHERE campo != 1999
Devolverán el mismo resultado.
Operadores lógicos: OR, AND
Los operadores
AND, OR y NOT son operadores lógicos importantes en SQL. Ayudan a combinar las condiciones utilizadas
para filtrar los registros.
SELECT campo4 FROM nombre_tabla
WHERE campo1 < 2005 OR campo2 < 10000
Operador BETWEEN en Oracle
incluye los extremos
SELECT * FROM nombre_tabla WHERE campo
BETWEEN 2 AND 4;
Saca 2,3 y 4
Operador NOT
Se quitará de los resultados todo
lo que se indique después de NOT
SELECT campo1, campo2, campo3 FROM
nombre_tabla WHERE campo3 NOT BETWEEN 1995 AND 2005;
Combinación de condiciones
Para combinar condiciones se
utilizan paréntesis
SELECT campo1 FROM nombre_tabla WHERE (campo2 < 1999 OR campo2 > 2005) AND ( campo3 < 4000 OR campo3 > 10000);
Operador LIKE y %
¿qué pasa si no sabemos
exactamente qué letras estamos buscando? Con los valores tipo texto, siempre se
puede utilizar el operador LIKE en lugar del signo igual
Con LIKE se puede usar del signo
de porcentaje (%). El signo de porcentaje que se aplica en el ejemplo equivale
a cualquier número (cero o más) de caracteres desconocidos.
Como resultado, obtendremos todos
los valores cuyo nombre empiece por la letra "F". Es posible que no
recordemos el nombre exacto de un valor, pero sabemos que empieza por F.
SELECT campo1, campo2, campo3 FROM
nombre_tabla WHERE campo1 LIKE 'F%';
El signo de porcentaje (%) se
puede poner en cualquier lugar dentro de las comillas simples y tantas veces
como sea necesario.
SELECT * FROM nombre_tabla WHERE campo
LIKE '%A%';
Seleccionará cualquier valor cuyo
nombre contenga al menos una "A".
El signo de porcentaje (%) también puede equivaler a no tener a ningún
carácter, por lo que el nombre también puede empezar o terminar con la
"A".
Carácter de subrayado (_)
Es posible que, a veces, no
recordemos solo una letra de un nombre concreto. Imagina que queremos encontrar
a una chica que se llama... ¿Catherine? ¿Katherine?
SELECT * FROM nombre_tabla WHERE nombre
LIKE '_atherine';
El carácter de subrayado (_)
coincide exactamente con un solo carácter. Ya sea Catherine o Katherine, la
expresión devolverá una fila.
NULL
NULL es un valor especial. No se
puede utilizar el signo de igual para comprobar si algo es NULL. Básicamente,
no funcionará, se utiliza IS NULL.
SELECT campo1, campo2, campo3
FROM nombre_tabla WHERE campo IS NULL;
Esta consulta devolverá solo las
filas cuyo campo es null, es decir es desconocido.
SELECT * FROM nombre_tabla WHERE campo
IS NULL;
Si se establece una condición en
una columna concreta, por ejemplo, campo
< 70, las filas en las que la edad sea NULL quedarán siempre excluidas de
los resultados.
En ningún caso NULL es igual a
cero.
SELECT * FROM nombre_tabla WHERE campo
> 0;
No devolverá los registros con campo
NULL
NOT NULL
Para comprobar si una columna
tiene un valor, utilizamos la instrucción especial IS NOT NULL.
SELECT campo1 FROM nombre_tabla
WHERE campo2 IS NOT NULL;
Este código selecciona solo las
filas que tienen cuyo campo2 tiene un valor no nulo.
Operadores matemáticos básicos
SELECT * FROM nombre_tabla WHERE
(campo * 12) > 50000;
En el ejemplo anterior,
utilizamos el asterisco (*) para multiplicar valor del campo por 12 y, así, si
campo es un salario mensual, obtendremos el salario anual. A continuación,
podemos hacer lo que queramos con el nuevo valor; en este caso, lo comparamos
con 50.000 €.
De este modo, se pueden usar
signos para sumar (+), restar (-), multiplicar (*) y dividir (/) números.
Ejemplo: Seleccionar los artículos
para los que se pagan más de 2000 € en impuestos. El importe de los impuestos
de todos los artículos es el 20 % de su precio. Se multiplica que el precio por
0.2 para obtener el importe de los impuestos.
SELECT * FROM artículos WHERE
precio * 0.2 > 2000;
Ejercicio
Seleccionar todas las columnas de
artículos que cumplan lo siguiente:
se fabricaron entre 1999 y 2005;
no son marca ACME;
su modelo que empieza por
"P" o "F";
tienen fijado un precio;
SELECT * FROM coche WHERE fecha_de_produccion BETWEEN 1999 AND 2005 AND marca != 'ACME' AND (modelo LIKE 'P%' OR modelo LIKE 'F%') AND precio IS NOT NULL;