En este artículo, exploraremos sentencias SQL más complejas que permiten realizar operaciones avanzadas en bases de datos. Estas sentencias son esenciales para manipular datos de manera eficiente y realizar consultas sofisticadas.
1. Subconsultas Correlacionadas
Las subconsultas correlacionadas son consultas anidadas que dependen de la consulta externa. Se ejecutan una vez para cada fila de la consulta externa.
Ejemplo: Seleccionar registros con el valor máximo en un grupo
SELECT a.nombre, a.valor
FROM tabla a
WHERE a.valor = (
SELECT MAX(b.valor)
FROM tabla b
WHERE a.grupo = b.grupo
);
Este ejemplo selecciona los nombres y valores de una tabla, mostrando solo los registros con el valor máximo dentro de cada grupo.
2. Uso de JOINs Complejos
Los JOINs permiten combinar filas de dos o más tablas basadas en una condición relacionada entre ellas. JOINs complejos pueden involucrar múltiples tablas y condiciones.
Ejemplo: Seleccionar registros combinados de múltiples tablas
SELECT t1.nombre AS nombre_t1, t2.nombre AS nombre_t2, t3.detalle
FROM tabla1 t1
JOIN tabla2 t2 ON t1.id = t2.t1_id
JOIN tabla3 t3 ON t2.id = t3.t2_id
WHERE t3.condicion = 'valor';
Este ejemplo combina tres tablas utilizando JOINs y selecciona los registros donde se cumple una condición específica en la tercera tabla.
3. Agregación y Agrupación de Datos
Las funciones de agregación permiten realizar cálculos sobre un conjunto de valores, como sumas, promedios, conteos, etc. La cláusula GROUP BY
se utiliza para agrupar los resultados por uno o más columnas.
Ejemplo: Contar y agrupar registros por categoría
SELECT categoria, COUNT(*)
FROM tabla
GROUP BY categoria
HAVING COUNT(*) > 10;
Este ejemplo cuenta los registros de una tabla agrupados por la columna categoria
, mostrando solo aquellas categorías que tienen más de 10 registros.
4. CTEs (Common Table Expressions)
Las CTEs se utilizan para definir consultas temporales que pueden ser referenciadas dentro de una instrucción SELECT
, INSERT
, UPDATE
o DELETE
.
Ejemplo: Utilizar CTE para cálculos intermedios
WITH CTE_Intermedia AS (
SELECT categoria, SUM(valor) AS total_valor
FROM tabla
GROUP BY categoria
)
SELECT categoria, total_valor
FROM CTE_Intermedia
WHERE total_valor > 1000;
En este ejemplo, la CTE CTE_Intermedia
calcula la suma de valores por categoría. Luego, la consulta principal selecciona solo aquellas categorías con un total de valores mayor a 1000.
5. Uso de Funciones de Ventana
Las funciones de ventana realizan cálculos sobre un conjunto de filas relacionadas con la fila actual.
Ejemplo: Calcular el ranking de registros dentro de grupos
SELECT nombre, categoria, valor,
RANK() OVER (PARTITION BY categoria ORDER BY valor DESC) AS ranking
FROM tabla;
Este ejemplo calcula el ranking de cada registro dentro de su categoría, ordenando por el valor en orden descendente.
6. Actualización Condicional de Múltiples Tablas
Las sentencias UPDATE
pueden ser utilizadas para actualizar múltiples tablas bajo ciertas condiciones.
Ejemplo: Actualizar registros en múltiples tablas
UPDATE t1
JOIN t2 ON t1.id = t2.t1_id
SET t1.estado = 'actualizado', t2.estado = 'actualizado'
WHERE t2.condicion = 'valor';
Este ejemplo actualiza los estados en dos tablas relacionadas, basándose en una condición específica en la segunda tabla.
7. Inserciones Condicionales
Las inserciones condicionales permiten insertar datos en una tabla solo si se cumple una condición específica.
Ejemplo: Insertar registros basados en una condición
INSERT INTO tabla_destino (columna1, columna2)
SELECT columna1, columna2
FROM tabla_origen
WHERE columna3 = 'condicion';
Este ejemplo inserta registros en la tabla destino desde la tabla origen solo si se cumple una condición específica en la columna3.
Conclusión
Las sentencias SQL avanzadas, como las subconsultas correlacionadas, JOINs complejos, funciones de agregación, CTEs, funciones de ventana, actualizaciones condicionales e inserciones condicionales, son herramientas poderosas para manipular y consultar datos en bases de datos relacionales. Comprender y utilizar estas sentencias puede mejorar significativamente la eficiencia y efectividad de las operaciones en bases de datos.