curso
Subconsulta SQL: Guía completa
Las subconsultas SQL son una poderosa herramienta en la gestión de bases de datos, que permite una recuperación de datos más compleja y eficaz. Esta guía te guiará a través de los fundamentos de las subconsultas SQL, ofreciéndote información sobre sus aplicaciones prácticas y técnicas avanzadas. Tanto si eres un principiante como un profesional experimentado, dominar las subconsultas puede mejorar significativamente tus habilidades SQL.
Si eres nuevo en SQL, puedes empezar con nuestro curso SQL Intermedio para construir una base sólida. Además, considero que la Hoja de trucos de SQL Básico, que puedes descargar, es una referencia útil porque contiene todas las funciones SQL más comunes. Por último, quiero decir que las subconsultas son una pregunta de entrevista SQL, así que si te estás preparando para una entrevista, has venido al lugar adecuado para repasarlas.
¿Qué es una subconsulta SQL?
Una subconsulta permite que las consultas SQL sean más modulares al gestionar tareas que, de otro modo, requerirían varias consultas independientes.
Definición y finalidad
Una subconsulta SQL es una consulta anidada dentro de otra consulta SQL, que se utiliza para realizar operaciones que requieren varios pasos o una lógica compleja. La función de las subconsultas en SQL incluye lo siguiente:
- Filtrar registros basándose en datos de tablas relacionadas.
- Agregando datos y realizando cálculos dinámicamente.
- Cruzar datos entre tablas para obtener información específica.
- Seleccionar filas condicionalmente sin necesidad de uniones explícitas o lógica de código externa.
Parece mucho, pero tendrá sentido a medida que exploremos estas cosas en el tutorial.
Tipos de subconsultas
Quizá te sorprenda saber que existen distintos tipos de subconsultas. Los distintos tipos se agrupan en función de las distintas necesidades de recuperación de datos y se adaptan a ellas. Puedes elegir entre las siguientes subconsultas en función de la operación que quieras realizar:
Subconsultas escalares
Las subconsultas escalares devuelven un único valor, como una fila y una columna. Suelen utilizarse cuando se espera un único valor, como en cálculos, comparaciones o asignaciones en las cláusulas SELECT
o WHERE
.
En el ejemplo siguiente, la subconsulta escalar (SELECT AVG(salary) FROM employees)
devuelve un único valor, el salario medio, y lo compara con el salario de cada empleado.
-- Example of Scalar Subquery
-- Compares each salary to the average salary
SELECT employee_name,
salary,
(SELECT AVG(salary) FROM employees) AS average_salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
Subconsultas de columna
Las subconsultas de columna devuelven una sola columna pero varias filas. Estas subconsultas se utilizan a menudo con operadores como IN
o ANY
, donde la consulta externa compara valores de varias filas.
Por ejemplo, la subconsulta siguiente devuelve una lista de identificadores de departamento para los departamentos situados en Nueva York, que la consulta principal utiliza después para filtrar a los empleados de esos departamentos.
-- Example of Column Subquery
-- Filters based on departments in New York
SELECT employee_name
FROM employees
WHERE department_id IN (SELECT department_id FROM departments WHERE location = 'New York');
Subconsultas de fila
Las subconsultas de fila devuelven una única fila que contiene varias columnas. Estas subconsultas se suelen utilizar con operadores de comparación que pueden comparar una fila de datos, como los operadores =
o IN
, cuando se esperan varios valores.
La siguiente subconsulta recupera el departamento y el cargo de un directivo, y la consulta externa encuentra los empleados con valores coincidentes.
-- Example of Row Subquery
-- Matches department and job title with a specific manager
SELECT employee_name
FROM employees
WHERE (department_id, job_title) = (SELECT department_id, job_title FROM managers WHERE manager_id = 1);
Subconsultas de tablas (tablas derivadas)
Las subconsultas de tabla, o tablas derivadas, devuelven una tabla completa de varias filas y columnas. Se suelen utilizar en la cláusula FROM
como tabla temporal dentro de una consulta.
Por ejemplo, la subconsulta siguiente crea una tabla derivada de salarios medios por departamento, que luego se utiliza en la consulta externa para encontrar departamentos con un salario medio superior a un umbral especificado.
-- Example of Table Subquery
-- Uses derived table for average department salary comparison
SELECT dept_avg.department_id, dept_avg.avg_salary
FROM
(SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY department_id) AS dept_avg
WHERE dept_avg.avg_salary > 50000;
Comprender las subconsultas SQL
En los ejemplos anteriores, hemos visto que una subconsulta se encierra entre paréntesis. Exploremos ahora la mecánica de una subconsulta, incluyendo su sintaxis y orden de ejecución.
Sintaxis y estructura
La sintaxis de una subconsulta varía en función de dónde se utilice en la sentencia SQL principal, como dentro de las cláusulas SELECT
, FROM
o WHERE
. Las subconsultas suelen ir entre paréntesis ( )
, lo que indica que se trata de una consulta independiente.
El siguiente ejemplo muestra una subconsulta dentro de una cláusula WHERE
, que nos permite filtrar datos en la consulta principal basándonos en los resultados de una consulta anidada.
-- Selects the main column to retrieve from the main table to query
SELECT column_name
FROM table_name
-- Applies a condition to filter rows based on the subquery result
WHERE column_name operator
-- Subquery retrieves data for comparison in the WHERE clause
(SELECT column_name FROM table_name WHERE condition);
Orden de ejecución
El orden de ejecución de las subconsultas depende de si están correlacionadas o no.
Subconsultas no correlacionadas
Las subconsultas no correlacionadas son independientes de la consulta externa y se ejecutan primero. El resultado de la subconsulta se pasa a la consulta externa. Las subconsultas no correlacionadas se suelen utilizar para cálculos y filtros escalares o a nivel de columna.
La consulta siguiente sigue el orden de ejecución:
-
La subconsulta
(SELECT AVG(salary) FROM employees)
se ejecuta primero y calcula el salario medio. -
La consulta externa recupera entonces los empleados cuyo salario es superior a esta media.
-- Retrieves names of employees with above-average salary
SELECT employee_name
FROM employees
-- Subquery: calculates average salary across all employees
WHERE salary > (SELECT AVG(salary) FROM employees);
Te recomiendo que sigas el curso Introducción a SQL Server de DataCamp para aprender más sobre la agrupación y agregación de datos, y la unión de tablas.
Subconsultas correlacionadas
Las subconsultas correlacionadas dependen de la consulta externa para algunos de sus datos, por lo que se reevalúan para cada fila procesada por la consulta externa.
La siguiente consulta se ejecuta en este orden:
-
Para cada fila de
employees
(aliase1
), la subconsulta(SELECT AVG(e2.salary) FROM employees e2 WHERE e2.department_id = e1.department_id)
calcula el salario medio de ese departamento concreto. -
A continuación, la consulta externa compara el salario de cada empleado con el salario medio del departamento e incluye sólo a los que ganan más.
-- Retrieves names of employees with above-average salary in their department
SELECT e1.employee_name
FROM employees e1
-- Subquery: calculates average salary for each department
WHERE e1.salary > (SELECT AVG(e2.salary) FROM employees e2 WHERE e2.department_id = e1.department_id);
Aplicaciones de la subconsulta SQL
Las subconsultas SQL son importantes para la recuperación y transformación de datos, ya que te permiten escribir consultas complejas y manejar tareas avanzadas de análisis de datos. Las siguientes son aplicaciones reales de las subconsultas en la gestión de bases de datos.
Filtrar datos
Las subconsultas son útiles para filtrar datos basándose en condiciones dinámicas, especialmente cuando el filtrado requiere comparar valores de varias tablas o realizar cálculos.
La siguiente subconsulta recupera el category_id
de "Producto A", y la consulta principal encuentra todos los productos de esa categoría.
-- Retrieves names of products in the same category as 'Product A'
SELECT product_name
FROM products
-- Subquery: finds category ID of 'Product A'
WHERE category_id = (SELECT category_id FROM products WHERE product_name = 'Product A');
Agregación de datos
Las subconsultas también se utilizan para la agregación de datos, especialmente cuando se generan estadísticas resumidas o perspectivas para informes y análisis. La subconsulta (SELECT department_id, AVG(sales) AS avg_sales FROM sales GROUP BY department_id)
calcula las ventas medias por departamento. La consulta externa filtra entonces los departamentos con una media de ventas superior a 50.000.
-- Retrieves department IDs and their average sales
-- Filters for departments with average sales over 50,000
SELECT department_id, avg_sales
FROM (SELECT department_id, AVG(sales) AS avg_sales FROM sales GROUP BY department_id) AS dept_sales -- Subquery: calculates average sales per department
WHERE avg_sales > 50000;
Consideraciones sobre el rendimiento y buenas prácticas
Aunque las subconsultas son potentes a la hora de escribir consultas complejas, pueden afectar al rendimiento, especialmente cuando se trabaja con grandes conjuntos de datos. Es importante tener en cuenta los escollos habituales y las mejores prácticas para mejorar el rendimiento.
Optimizar el rendimiento de las subconsultas
Optimizar el rendimiento de las subconsultas garantiza una mejora del tiempo de ejecución de la consulta y de la capacidad de respuesta de la base de datos. A continuación se indican formas de optimizar la subconsulta.
-
Índice Columnas relevantes: Para acelerar la recuperación de datos, asegúrate de que las columnas utilizadas en las cláusulas
WHERE
yJOIN
y en las operaciones de comparación estén indexadas. -
Limita el Uso de Subconsultas Correlacionadas: Siempre que sea posible, utiliza operaciones JOIN o CTE en lugar de subconsultas correlacionadas, ya que a menudo pueden procesar los datos más rápidamente utilizando operaciones de conjunto en lugar de procesar fila por fila.
-
Limitar el número de columnas en las subconsultas: Selecciona sólo las columnas que necesites en las subconsultas para minimizar la recuperación de datos, reducir el uso de memoria y permitir que la base de datos optimice la ejecución.
-
Utiliza EXISTE en lugar de EN: Si una subconsulta devuelve un conjunto de datos grande, utilizar
EXISTS
en lugar deIN
puede mejorar el rendimiento. El operadorEXISTS
detendrá el procesamiento de la consulta cuando encuentre una fila coincidente, mientras que el operadorIN
seguirá evaluando todo el resultado de la subconsulta.
Evitar errores comunes
Si escribes mal las subconsultas, puedes tener problemas al ejecutarlas. Veamos cómo evitar estos escollos.
-
Evita Subconsultas Correlacionadas Innecesarias: Las subconsultas correlacionadas consumen muchos recursos, así que evita utilizarlas cuando el resultado pueda obtenerse con una subconsulta no correlacionada o una unión.
-
Ten cuidado con los valores NULL en las subconsultas: los valores
NULL
pueden dar lugar a resultados inesperados, especialmente en las subconsultas que utilizan operadores de comparación comoIN
o=
. Para evitar errores, considera la posibilidad de utilizarCOALESCE
para tratar los nulos o asegurarte de que las columnas no son anulables si se utilizan para comparaciones. -
Evita utilizar SELECT * en las subconsultas: Utilizar
SELECT *
puede resultar ineficaz, ya que recupera todas las columnas, aunque no las necesites. Esto aumenta el uso de memoria y puede ralentizar la ejecución de las consultas, especialmente con grandes conjuntos de datos. -
Utiliza alias significativos: Nombra claramente tus tablas y subconsultas para mejorar la legibilidad.
Prueba nuestro itinerario profesional de Desarrollador de SQL Server, que te dotará de los conocimientos necesarios para escribir, solucionar problemas y optimizar tus consultas con SQL Server.
Más técnicas avanzadas de subconsulta SQL
Aunque las subconsultas ofrecen una forma eficaz de escribir consultas complejas, existen métodos avanzados para manejar datos jerárquicos. Examinemos las técnicas y estrategias avanzadas para aplicar subconsultas SQL.
Subconsultas recursivas
Las subconsultas recursivas (también conocidas como expresiones comunes de tabla recursivas o CTE) te permiten recuperar datos jerárquicos, como estructuras organizativas, categorías de productos o relaciones basadas en gráficos, donde cada elemento de los datos está vinculado a otro.
Supón que tienes una tabla employees
con employee_id
, manager_id
, y employee_name
. Quieres recuperar la jerarquía de los empleados que dependen de un directivo concreto.
WITH RECURSIVE EmployeeHierarchy AS (
-- Anchor Query: Start with the specified manager
SELECT employee_id, manager_id, employee_name, 1 AS level
FROM employees
-- Assuming the top-level manager has NULL as manager_id
WHERE manager_id IS NULL
UNION ALL
-- Recursive Query: Find employees who report to those in the previous level
SELECT e.employee_id, e.manager_id, e.employee_name, eh.level + 1
FROM employees e
INNER JOIN EmployeeHierarchy eh ON e.manager_id = eh.employee_id
)
SELECT * FROM EmployeeHierarchy;
En la consulta anterior:
-
Lo que yo llamo Consulta Ancla selecciona el gestor de nivel superior (donde
manager_id
esNULL
). -
La Consulta Recursiva une
employees
con el propio CTE (EmployeeHierarchy
), encontrando empleados que dependen de cada empleado recuperado previamente. -
La recursión continúa hasta que no hay más empleados que informen a los encontrados.
Combinar subconsultas con otras funciones SQL
Puedes integrar las subconsultas con otras funciones SQL, como las funciones de ventana, las sentencias CASE
y las funciones de agrupación. Estas combinaciones permiten una manipulación avanzada de los datos y la elaboración de informes más completos.
Combinar subconsultas con funciones de ventana
Las subconsultas pueden utilizarse para refinar el conjunto de datos sobre el que actúan las funciones de ventana, lo que las hace útiles para clasificaciones, totales acumulados y medias móviles. Supón que quieres clasificar los productos por ventas dentro de cada región. Puedes utilizar una subconsulta para seleccionar los datos relevantes y luego aplicar una función de ventana para clasificarlos.
-- Ranks products by sales within each region
SELECT region, product_id, sales,
RANK() OVER (PARTITION BY region ORDER BY sales DESC) AS sales_rank
-- Subquery: calculates total sales per product in each region
FROM (SELECT region, product_id, SUM(sales) AS sales
FROM sales_data
GROUP BY region, product_id) AS regional_sales;
Utilizar subconsultas con sentencias CASE
Combinar subconsultas con sentencias CASE
puede ayudarte a aplicar condiciones complejas basadas en cálculos dinámicos. La siguiente consulta clasifica los productos en "Alto", "Medio" o "Bajo" rendimiento en función de sus ventas en relación con las ventas medias de su categoría.
-- Categorize above-average sales, average sales, and below-average sales
SELECT product_id, category_id, sales,
CASE
WHEN sales > (SELECT AVG(sales) FROM products WHERE category_id = p.category_id) THEN 'High'
WHEN sales = (SELECT AVG(sales) FROM products WHERE category_id = p.category_id) THEN 'Medium'
ELSE 'Low'
END AS performance
FROM products AS p;
Subconsultas con funciones de agregación para la agregación condicional
También puedes calcular agregados condicionales utilizando subconsultas dentro de las funciones de agregado. Supón que quieres calcular los ingresos totales generados sólo por los clientes activos. En el ejemplo siguiente, la subconsulta recupera todos los clientes activos. A continuación, la consulta principal filtra los pedidos para incluir sólo los realizados por clientes activos, calculando los ingresos totales de este grupo.
-- Calculates total revenue from active customers
SELECT SUM(order_total) AS active_customer_revenue
FROM orders
-- Subquery: retrieves IDs of active customers
WHERE customer_id IN (
SELECT customer_id
FROM customers
WHERE status = 'Active'
);
Cuando se utilizan subconsultas SQL
Las subconsultas SQL ofrecen aplicaciones versátiles en el mundo real para el análisis de datos, por eso se utilizan con tanta frecuencia. Las siguientes son algunas aplicaciones específicas del sector o matemáticas de las subconsultas SQL. Para llegar a estas ideas, intenté pensar en trabajos de análisis o ingeniería de datos que requieren múltiples pasos, que es, en mi opinión, donde las subconsultas son realmente útiles.
Ejemplos específicos del sector
Las subconsultas pueden ofrecer soluciones útiles en los sectores financiero, sanitario y minorista. Aquí tienes algunas ideas:
-
Evaluación de riesgos para la aprobación de préstamos (Finanzas): Me imagino a los bancos haciendo malabarismos con métricas como los ratios deuda-ingresos y las puntuaciones de crédito. Al anidar estas métricas en subconsultas, los analistas pueden entender mejor las métricas financieras complicadas. Tal vez, una subconsulta pueda calcular el importe medio del préstamo para los clientes dentro de determinados tramos de ingresos.
-
Identificar patrones en los diagnósticos de los pacientes (Sanidad): En sanidad, gestionar los datos de los pacientes puede ser un gran trabajo. Las subconsultas podrían ayudar a romper esta complejidad. Me imagino utilizando subconsultas para hacer un seguimiento de las frecuencias de diagnóstico en diferentes grupos de edad o factores de riesgo.
-
Optimizar la colocación de productos basándose en el historial de compras (comercio minorista): A los minoristas les encanta comprender las pautas de compra. Las subconsultas pueden mostrar datos de compra anidados para identificar qué productos suelen comprarse juntos. Esto podría ayudar a colocar estratégicamente los artículos complementarios e impulsar las ventas.
Conexiones matemáticas
Las subconsultas también se utilizan para identificar patrones de datos y tendencias en conexiones matemáticas y lógicas. A continuación se exponen algunas situaciones en las que se aplican las subconsultas en matemáticas.
-
Medias móviles para el análisis de series temporales: Al analizar tendencias a lo largo del tiempo, las subconsultas simplifican el cálculo de medias móviles. Veo que definen ventanas temporales específicas dentro de consultas anidadas, lo que facilita la suavización de los datos y la detección de tendencias.
-
Detección de valores atípicos mediante desviaciones típicas: Detectar valores atípicos es importante para muchas cosas, como la detección del fraude. Las subconsultas facilitan el cálculo de métricas, como las desviaciones típicas, dentro de consultas anidadas.
-
Utilización de conceptos de la Teoría de Conjuntos: Me parece interesante cómo las subconsultas reflejan operaciones de la teoría de conjuntos como
UNION
yINTERSECT
. Esta capacidad es perfecta para tareas como el análisis de la retención de clientes, donde la comprensión de los solapamientos y diferencias entre grupos de clientes puede impulsar estrategias de marketing más inteligentes.
Conclusión
Dominar las subconsultas SQL puede mejorar significativamente tu capacidad para gestionar y analizar datos con eficacia. Si comprendes su estructura, aplicaciones y mejores prácticas, podrás optimizar tus consultas SQL para obtener un mejor rendimiento. Además, quiero decir que dominar las subconsultas facilita la escritura de SQL, así que merece la pena aprenderlo.
Si estás interesado en convertirte en un analista de datos competente, consulta nuestro itinerario profesional de Analista de Datos Asociado en SQL para aprender las habilidades necesarias. El curso Informes en SQL también es adecuado si quieres aprender a crear cuadros de mando profesionales utilizando SQL. Por último, recomiendo obtener la Certificación de Asociado SQL para demostrar tu dominio del uso de SQL para el análisis de datos y destacar entre los demás profesionales de datos.
Preguntas frecuentes sobre subconsultas SQL
¿Qué es una subconsulta SQL?
Una subconsulta SQL es una consulta anidada dentro de otra consulta SQL, que se utiliza para realizar operaciones que requieren varios pasos o una lógica compleja.
¿Cómo se utiliza una subconsulta en SQL?
Las subconsultas se utilizan dentro de las sentencias SQL para filtrar datos, realizar cálculos o recuperar información específica basándose en condiciones complejas.
¿Cuáles son los tipos de subconsultas en SQL?
Las subconsultas SQL pueden clasificarse en subconsultas escalares, de columna, de fila y de tabla, cada una de las cuales sirve para fines distintos en la recuperación de datos.
¿Qué diferencia hay entre una subconsulta y un join?
Una subconsulta es una consulta anidada que se utiliza para operaciones complejas, mientras que una unión combina filas de dos o más tablas basándose en columnas relacionadas.
¿Cómo pueden las subconsultas mejorar el rendimiento de las consultas SQL?
Las subconsultas pueden agilizar las consultas complejas dividiéndolas en partes más pequeñas y manejables, lo que puede mejorar el rendimiento si se utilizan correctamente.
Aprende SQL con DataCamp
curso
Intermediate SQL
curso
Joining Data in SQL
tutorial
Cómo utilizar un alias SQL para simplificar tus consultas

Allan Ouko
9 min
tutorial
Ejemplos y tutoriales de consultas SQL
tutorial
Seleccionar varias columnas en SQL

DataCamp Team
3 min
tutorial
Cómo utilizar GROUP BY y HAVING en SQL

Eugenia Anello
6 min
tutorial
Introducción a los disparadores SQL: Guía para desarrolladores

Oluseye Jeremiah
13 min
tutorial