[SQL 02] Filtrar con WHERE
- Filtrar filas con operadores de comparación:
= <> < > <= >=. - Combinar condiciones con
AND,OR,NOTy paréntesis. - Usar
BETWEEN,IN,LIKE(con%y_) eIS NULL. - Filtrar por fechas almacenadas como texto ISO (
'AAAA-MM-DD').
La cláusula WHERE deja pasar solo las filas que cumplen una condición. Se evalúa
fila por fila, antes de mostrar el resultado. Las condiciones se combinan con AND (ambas),
OR (al menos una) y NOT (negación).
Precedencia: AND se evalúa antes que OR. Si mezclas ambos, usa paréntesis:
WHERE (dept = 50 OR dept = 80) AND salary > 8000 no es lo mismo que sin paréntesis.
NULL significa «valor desconocido»: nunca es igual a nada (ni a otro NULL). Por eso se pregunta con
IS NULL / IS NOT NULL, jamás con = NULL.
SELECT columnas FROM tabla WHERE condición1 AND (condición2 OR condición3);
OR.% = cualquier cantidad de caracteres; _ = exactamente uno.= NULL siempre es falso.NOT IN, NOT LIKE, NOT BETWEEN.'2022-03-15' se compara bien como texto: hire_date >= '2022-01-01'.LIKE no distingue mayúsculas (texto ASCII)LIKE distingue mayúsculas: usa UPPER(col) LIKE 'D%'Oracle: hire_date >= DATE '2022-01-01'1 · Ejemplos guiados · ejecuta y modifica cada bloque
NULL. Cambia IS NOT NULL por = NULL y verás que no devuelve nada.⚠ Errores frecuentes
- Escribir
WHERE commission_pct = NULL: nunca devuelve filas. Lo correcto esIS NULL. - Mezclar
ANDyORsin paréntesis:a OR b AND csignificaa OR (b AND c). - Olvidar las comillas en textos (
WHERE job_id = IT_PROG) o ponerlas en números (salary > '9000'). LIKE 'D%'busca «empieza con D»;LIKE '%D%'busca «contiene D» en cualquier posición.NOT INcon una lista que contieneNULLno devuelve filas (lo verás en subconsultas).
2 · Retos con corrección automática
Escribe tu solución y pulsa comprobar (Ctrl + Enter). Tu consulta y la solución se ejecutan en bases limpias y se comparan los resultados: no importan los nombres de las columnas, sí los datos (y el orden, cuando el reto lo pide). Si te atascas, usa la pista o mira el resultado esperado.
3 · Preguntas tipo solemne
SELECT * FROM employees WHERE commission_pct = NULL;
commission_pct IS NULL.first_name LIKE '_a%'?_ representa exactamente un carácter; luego viene la a y % cualquier resto: Laura, David, Daniel…salary BETWEEN 5000 AND 9000?dept = 50 OR dept = 80 AND salary > 8000?