Las subconsultas, también conocidas como consultas anidadas, son consultas SQL que se incluyen dentro de otra consulta SQL. Las subconsultas pueden ser muy útiles para realizar operaciones complejas y obtener resultados específicos que no se pueden lograr fácilmente con una sola consulta.

Conceptos Clave

  1. Definición de Subconsulta: Una subconsulta es una consulta dentro de otra consulta. Se puede utilizar en varias partes de una consulta principal, como en la cláusula SELECT, FROM, WHERE, HAVING, etc.
  2. Tipos de Subconsultas:
    • Subconsultas Escalares: Devuelven un solo valor.
    • Subconsultas de Filas: Devuelven una sola fila con múltiples columnas.
    • Subconsultas de Tabla: Devuelven múltiples filas y columnas.
  3. Ubicación de Subconsultas:
    • En la cláusula SELECT: Para calcular valores en la lista de selección.
    • En la cláusula FROM: Para tratar la subconsulta como una tabla derivada.
    • En la cláusula WHERE: Para filtrar resultados basados en los resultados de la subconsulta.
    • En la cláusula HAVING: Para filtrar grupos de resultados.

Ejemplos Prácticos

Subconsulta en la Cláusula WHERE

Supongamos que tenemos dos tablas: employees y departments.

CREATE TABLE employees (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    department_id INT,
    salary NUMERIC
);

CREATE TABLE departments (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100)
);

INSERT INTO departments (name) VALUES ('HR'), ('Engineering'), ('Sales');
INSERT INTO employees (name, department_id, salary) VALUES
('Alice', 1, 50000),
('Bob', 2, 60000),
('Charlie', 2, 70000),
('David', 3, 55000);

Queremos encontrar los empleados que trabajan en el departamento de 'Engineering'.

SELECT name
FROM employees
WHERE department_id = (SELECT id FROM departments WHERE name = 'Engineering');

Explicación:

  • La subconsulta (SELECT id FROM departments WHERE name = 'Engineering') devuelve el id del departamento de 'Engineering'.
  • La consulta principal selecciona los nombres de los empleados cuyo department_id coincide con el id devuelto por la subconsulta.

Subconsulta en la Cláusula SELECT

Queremos obtener el nombre de cada empleado junto con el nombre de su departamento.

SELECT name,
       (SELECT name FROM departments WHERE id = employees.department_id) AS department_name
FROM employees;

Explicación:

  • La subconsulta (SELECT name FROM departments WHERE id = employees.department_id) devuelve el nombre del departamento correspondiente al department_id de cada empleado.
  • La consulta principal selecciona el nombre del empleado y el nombre del departamento devuelto por la subconsulta.

Subconsulta en la Cláusula FROM

Queremos encontrar el salario promedio de los empleados en cada departamento.

SELECT department_name, AVG(salary) AS average_salary
FROM (
    SELECT d.name AS department_name, e.salary
    FROM employees e
    JOIN departments d ON e.department_id = d.id
) AS dept_salaries
GROUP BY department_name;

Explicación:

  • La subconsulta SELECT d.name AS department_name, e.salary FROM employees e JOIN departments d ON e.department_id = d.id crea una tabla derivada con los nombres de los departamentos y los salarios de los empleados.
  • La consulta principal calcula el salario promedio agrupado por el nombre del departamento.

Ejercicio Práctico

Ejercicio 1: Subconsulta en WHERE

Encuentra los nombres de los empleados que tienen un salario mayor que el salario promedio de todos los empleados.

SELECT name
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

Ejercicio 2: Subconsulta en SELECT

Lista los nombres de los empleados junto con el nombre de su departamento y el salario promedio de su departamento.

SELECT name,
       (SELECT name FROM departments WHERE id = employees.department_id) AS department_name,
       (SELECT AVG(salary) FROM employees e WHERE e.department_id = employees.department_id) AS avg_department_salary
FROM employees;

Resumen

Las subconsultas son una herramienta poderosa en SQL que permiten realizar consultas complejas y obtener resultados específicos. Pueden ser utilizadas en varias partes de una consulta principal y pueden devolver diferentes tipos de resultados, como valores escalares, filas o tablas completas. Practicar con subconsultas te ayudará a dominar su uso y a escribir consultas SQL más eficientes y efectivas.

Curso de PostgreSQL

Módulo 1: Introducción a PostgreSQL

Módulo 2: Operaciones Básicas de SQL

Módulo 3: Consultas Avanzadas de SQL

Módulo 4: Diseño de Bases de Datos y Normalización

Módulo 5: Características Avanzadas de PostgreSQL

Módulo 6: Ajuste de Rendimiento y Optimización

Módulo 7: Seguridad y Gestión de Usuarios

Módulo 8: Trabajando con JSON y Características NoSQL

Módulo 9: Extensiones y Herramientas Avanzadas

Módulo 10: Estudios de Caso y Aplicaciones del Mundo Real

© Copyright 2024. Todos los derechos reservados