Fundamentos de SQL declarativo, precauciones al modificar datos, operaciones de conjunto, Joins internos y externos, agrupación, subconsultas y la lógica de tres valores con NULLs.
No memorices sintaxis exacta, en la I1 y Examen tendrás un torpedo. Concéntrate en saber cuándo y por qué usar cada comando, especialmente los Outer Joins, GROUP BY vs HAVING y la lógica de los NULLs.
SQL es un lenguaje declarativo: le dices a la base de datos qué quieres obtener, no el paso a paso de cómo hacerlo. Se divide en sublenguajes:
CREATE, DROP, ALTER.INSERT, UPDATE, DELETE.SELECT.¡Cuidado con el WHERE! Si omites el WHERE en un UPDATE o DELETE, afectarás a todas las filas de la tabla.
Al eliminar un registro referenciado por otra tabla, la BD arroja un error por defecto. Para evitarlo, al crear la tabla puedes usar:
ON DELETE CASCADE: Borra también los registros dependientes.ON DELETE SET NULL: Mantiene los dependientes, pero deja su llave foránea en NULL.A la hora de hacer consultas, existen operadores útiles para los filtros en el WHERE:
IN: Comprueba si un valor pertenece a una lista.BETWEEN: Permite definir un rango.LIKE: Busca patrones de texto. El comodín % representa cualquier secuencia de caracteres, y _ un único carácter.Puedes combinar resultados de múltiples consultas utilizando operaciones de conjunto:
UNION: Une los resultados de dos consultas, eliminando los duplicados.UNION ALL: Une los resultados sin eliminar duplicados (es más rápido que UNION).INTERSECT: Se queda solo con las filas que están en ambos resultados.EXCEPT: Le resta a los resultados de la primera consulta las filas de la segunda.Para combinar información de distintas tablas, SQL usa cruces o JOINs:
SELECT * FROM A, B. Combina todas las filas de A con todas las de B. Rara vez útil por sí solo.A.id = B.a_id). Si no hay coincidencia, la fila se descarta.LEFT OUTER JOIN: Mantiene todas las filas de la tabla izquierda (la primera). Si no hay coincidencia en la derecha, rellena sus columnas con NULL.Si quieres listar todos los estudios y la suma de ingresos de sus películas: con Inner Join perderás los estudios que no tienen películas; con Left Outer Join aparecerán, teniendo NULL en los campos relacionados a películas.
Las funciones de agregación (SUM, AVG, MIN, MAX, COUNT) nos permiten calcular métricas sobre conjuntos de filas.
Hay una diferencia clave entre contar filas y contar valores:
COUNT(*) cuenta filas enteras, incluyendo aquellas llenas de nulos.COUNT(atributo) cuenta solo los valores que no son nulos en esa columna específica.GROUP BY: Agrupa las filas que comparten el mismo valor en uno o más atributos para que la agregación se aplique por grupo y no al total de la tabla.HAVING: Es como un WHERE, pero se aplica después de agrupar. Sirve para filtrar usando el resultado de las funciones de agregación (ej. HAVING SUM(ventas) > 100).Las subconsultas se pueden colocar en el SELECT, FROM o WHERE.
En una subconsulta correlacionada, la consulta interior usa campos de la consulta exterior. Se debe evaluar una vez por cada fila de la consulta principal.
TRUE, FALSE y UNKNOWN.
1 + NULL) da NULL.=, <>) evalúa a UNKNOWN.= NULL. Usa siempre IS NULL o IS NOT NULL.NOT IN y la subconsulta devuelve al menos un NULL, toda la condición se vuelve UNKNOWN y la consulta no retornará ninguna fila.Al programar (ej. en PHP, Node, etc), NUNCA concatenes el texto ingresado por el usuario dentro del string de la consulta SQL. Debes usar SQL Parametrizado, así el motor lo trata como dato y no como código malicioso.