queryLab · software_de_entrenamiento en espera
Nivel 1 · Básico · SQL · DQL

[SQL 02] Filtrar con WHERE

Comparaciones, AND/OR/NOT, BETWEEN, IN, LIKE e IS NULL.
0 / 7 retos resueltos 📘 Clase 9 · ejercicios «filtrar con múltiples condiciones» y «LIKE»
Al terminar esta práctica podrás…
  • Filtrar filas con operadores de comparación: = <> < > <= >=.
  • Combinar condiciones con AND, OR, NOT y paréntesis.
  • Usar BETWEEN, IN, LIKE (con % y _) e IS 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.

Sintaxis
SELECT columnas
FROM tabla
WHERE condición1 AND (condición2 OR condición3);
BETWEEN a AND b
Rango inclusivo: incluye ambos extremos.
IN (v1, v2, …)
Pertenece a una lista. Equivale a varios OR.
LIKE 'D%'
% = cualquier cantidad de caracteres; _ = exactamente uno.
IS NULL
Pregunta si falta el valor. = NULL siempre es falso.
NOT
Niega: NOT IN, NOT LIKE, NOT BETWEEN.
Fechas ISO
'2022-03-15' se compara bien como texto: hire_date >= '2022-01-01'.
SQLite / MySQL
LIKE no distingue mayúsculas (texto ASCII)
Oracle / PostgreSQL
LIKE distingue mayúsculas: usa UPPER(col) LIKE 'D%'
Fechas
Oracle: hire_date >= DATE '2022-01-01'

1 · Ejemplos guiados · ejecuta y modifica cada bloque

01Comparación simple
Empleados que ganan más de 10000.
sql-where.sql
Presiona «ejecutar» para ver el resultado.
02AND / OR con paréntesis
Del departamento 50 o 80, y además con salario sobre 8000. Prueba quitar los paréntesis y compara la cantidad de filas.
sql-where.sql
Presiona «ejecutar» para ver el resultado.
03Patrones con LIKE (ejemplo de la clase 9)
Nombres que comienzan con D o terminan con a.
sql-where.sql
Presiona «ejecutar» para ver el resultado.
04BETWEEN e IN
Salario entre 5000 y 9000 (inclusive) en los departamentos 20, 60 o 100.
sql-where.sql
Presiona «ejecutar» para ver el resultado.
05Valores nulos
Solo 31 empleados tienen comisión; el resto tiene NULL. Cambia IS NOT NULL por = NULL y verás que no devuelve nada.
sql-where.sql
Presiona «ejecutar» para ver el resultado.
06Filtrar por fechas
Contratados durante el año 2023. Las fechas en formato ISO se comparan correctamente como texto.
sql-where.sql
Presiona «ejecutar» para ver el resultado.

⚠ Errores frecuentes

  • Escribir WHERE commission_pct = NULL: nunca devuelve filas. Lo correcto es IS NULL.
  • Mezclar AND y OR sin paréntesis: a OR b AND c significa a 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 IN con una lista que contiene NULL no 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

1. ¿Qué devuelve esta consulta?
SELECT * FROM employees WHERE commission_pct = NULL;
2. ¿Qué nombres cumplen first_name LIKE '_a%'?
3. ¿Cuál condición equivale a salary BETWEEN 5000 AND 9000?
4. Sin paréntesis, ¿cómo se evalúa dept = 50 OR dept = 80 AND salary > 8000?