Subconsultas y CASE
Los JOIN combinan tablas en horizontal. Hoy ves otra herramienta: meter una consulta SQL completa DENTRO de otra, como muñecas rusas. Se llaman subconsultas, y junto con CASE (el "si esto, entonces aquello" de SQL) son la puerta de entrada a consultas que de verdad razonan sobre los datos.
Subconsultas: una consulta dentro de otra
Una subconsulta es un SELECT completo metido entre paréntesis, dentro de otra consulta. Se ejecuta primero la de dentro, y su resultado alimenta a la de fuera.
EXISTS: ¿hay al menos una fila?
EXISTS comprueba si una subconsulta devuelve
al menos una fila — no le importa cuántas, ni su contenido,
solo si hay alguna o ninguna. Es muy eficiente, porque el motor puede parar en
cuanto encuentra la primera coincidencia.
ANY y ALL
Comparan un valor contra todos los resultados de una subconsulta a la vez.
La condición se cumple si es cierta para AL MENOS UNO de los valores de la subconsulta.
La condición se cumple solo si es cierta para TODOS los valores de la subconsulta.
Copiar datos: SELECT INTO e INSERT INTO SELECT
Crea una tabla NUEVA a partir del resultado de un SELECT (sintaxis de SQL Server; en MySQL y SQLite el equivalente es CREATE TABLE ... AS SELECT).
Copia filas desde una consulta hacia una tabla que YA EXISTE. Muy usado para archivar datos antiguos en otra tabla antes de borrarlos.
CASE: si esto, entonces aquello
CASE es el condicional de SQL: evalúa condiciones en
orden y devuelve un valor distinto según cuál se cumpla primero. Se usa dentro
de un SELECT, como si fuera una columna calculada.
Funciones para trabajar con NULL
COALESCE() (o IFNULL()
en SQLite/MySQL) devuelve el primer valor que no sea NULL de una lista —
perfecto para mostrar un valor por defecto en vez de un hueco vacío.
Ponlo a prueba
Comprueba lo que has aprendido
1. ¿Qué comprueba EXISTS?
2. ¿Qué hace CASE en un SELECT?
3. ¿Para qué sirve COALESCE (o IFNULL)?