Filtros avanzados, funciones y CASE
LIKE, IN, BETWEEN y NULL. Funciones de texto y fecha. Lógica condicional con CASE WHEN.
1. LIKE: buscar por patrones de texto
LIKE permite buscar textos que siguen un patrón. Usa dos comodines: % representa cualquier cantidad de caracteres (incluso ninguno) y _ representa exactamente un carácter.
| Patrón | Encuentra | Ejemplo |
|---|---|---|
'L%' | Empieza con L | Lomas, López |
'%Agua%' | Contiene ‘Agua’ | Agua 5L. |
'%a' | Termina en a | Elena, Teresa |
'_____' | Exactamente 5 letras | Pablo, Elena |
SELECT NOMBRE, APELLIDOS
FROM alumnos
WHERE APELLIDOS LIKE 'L%';2. IN: pertenecer a una lista
IN reemplaza varios OR encadenados por algo más limpio: comprueba si el valor está dentro de una lista. NOT IN hace lo contrario (excluye la lista).
SELECT NOMBRE, UBICACION
FROM mascotas
WHERE UBICACION IN ('E01','E02','E03');
-- equivale a UBICACION='E01' OR UBICACION='E02' OR ...3. BETWEEN: rangos
BETWEEN a AND b selecciona los valores dentro de un rango, incluyendo los extremos. Funciona con números y también con fechas.
SELECT NOMBRE, SALARIO
FROM empleados
WHERE SALARIO BETWEEN 1300 AND 1450;
SELECT * FROM alumnos
WHERE F_NACIMIENTO BETWEEN '1990-01-01' AND '1995-12-31';4. NULL: la ausencia de valor
NULL significa «valor desconocido o no cargado». No es cero ni texto vacío. Por eso no se compara con = sino con IS NULL / IS NOT NULL.
Error típico
WHERE ID_PROFE = NULL no devuelve ninguna fila. Lo correcto es WHERE ID_PROFE IS NULL.SELECT ID_CURSO, TITULO
FROM cursos
WHERE ID_PROFE IS NULL; -- cursos sin profesor
SELECT TITULO, COALESCE(ID_PROFE, 0) AS profe
FROM cursos; -- COALESCE reemplaza el NULL5. Funciones de texto
| Función | Qué hace |
|---|---|
| UPPER / LOWER | Pasa el texto a mayúsculas o minúsculas |
| CONCAT | Une columnas: CONCAT(NOMBRE,' ',APELLIDOS) |
| LENGTH | Cantidad de caracteres |
| SUBSTRING | Extrae una parte: SUBSTRING(NOMBRE,1,3) |
| TRIM | Quita espacios sobrantes |
| REPLACE | Reemplaza un texto por otro |
SELECT CONCAT(NOMBRE,' ',APELLIDOS) AS nombre_completo
FROM empleados;6. Funciones de fecha
| Función | Qué hace |
|---|---|
| NOW / CURDATE | Fecha y hora actuales |
| YEAR / MONTH / DAY | Extrae año, mes o día de una fecha |
| TIMESTAMPDIFF | Diferencia entre fechas (ej. edad en años) |
| DATE_FORMAT | Muestra la fecha en otro formato (dd/mm/aaaa) |
| DATEDIFF | Días entre dos fechas |
SELECT NOMBRE,
TIMESTAMPDIFF(YEAR, F_NACIMIENTO, CURDATE()) AS edad
FROM alumnos;7. CASE WHEN: categorías al vuelo
CASE es un «SI… ENTONCES…» dentro del SELECT: crea una columna nueva según condiciones. Sirve para clasificar valores y para traducir códigos a texto legible. ELSE cubre los casos restantes.
SELECT NOMBRE, SALARIO,
CASE
WHEN SALARIO >= 1450 THEN 'Alto'
WHEN SALARIO >= 1350 THEN 'Medio'
ELSE 'Base'
END AS nivel_salarial
FROM empleados;Tip
CASE también traduce códigos: CASE ESPECIE WHEN 'P' THEN 'Perro' WHEN 'G' THEN 'Gato' END.8. Con IA
Pedile a la IA
- «Explicá y corregí los errores de sintaxis de esta consulta: …»
- «¿Por qué
WHERE ID_PROFE = NULLno devuelve filas? ¿Cómo se corrige?» - «Traducí a SQL: artículos cuyo nombre contenga ‘gr.’ y cuesten menos de 2.»
Ejercicios de práctica (8)
- Alumnos cuyo NOMBRE empiece con ‘M’ o con ‘S’.
- Mascotas ubicadas en E01, E03 o E05 (usá IN).
- Empleados con salario entre 1.320 y 1.500 (usá BETWEEN).
- Cursos que no tienen profesor asignado (usá IS NULL).
- Nombre completo de los empleados en MAYÚSCULAS (CONCAT + UPPER).
- Año de nacimiento de cada alumno (YEAR).
- Edad de cada empleado (TIMESTAMPDIFF).
- Clasificá los artículos con CASE: ‘Barato’ (<1.5), ‘Medio’ (1.5–5), ‘Caro’ (>5).
