Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

SQL para ciencia de datos, Unidad 5 — Subconsultas y CTEs, 5.1 — Subconsultas ·

Subconsultas en SELECT

Subconsultas en SELECT

Introducción

Las subconsultas son una herramienta poderosa en SQL que permiten realizar consultas anidadas, es decir, utilizar consultas dentro de otras. Estas consultas internas (subconsultas) se utilizan para obtener datos dinámicos o condicionales que luego se pueden incorporar en la consulta externa. En el contexto de la ciencia de datos, las subconsultas son fundamentales para realizar análisis más complejos y para filtrar datos de manera eficiente.

Explicación principal con ejemplos

Las subconsultas dentro del SELECT permiten obtener valores dinámicos basados en condiciones específicas. Por ejemplo, podrías querer obtener los productos que tienen un precio mayor que el promedio de todos los productos:

SELECT nombre_producto, precio
FROM productos
WHERE precio > (SELECT AVG(precio) FROM productos);

En este caso, la subconsulta (SELECT AVG(precio) FROM productos) calcula el precio promedio de todos los productos y se utiliza como una condición en la consulta externa para filtrar solo aquellos productos con un precio mayor que el promedio.

Otro ejemplo podría ser obtener los empleados cuya salario es superior al salario del departamento en el que trabajan:

SELECT nombre_empleado, salario, (SELECT AVG(salario) FROM empleados WHERE departamento = e.departamento) AS avg_salario_departamento
FROM empleados e
WHERE salario > (SELECT AVG(salario) FROM empleados WHERE departamento = e.departamento);

En este ejemplo, la subconsulta calcula el promedio de salarios para cada departamento y se utiliza para filtrar los empleados cuyos salarios superan a ese promedio.

Errores típicos / trampas

  1. Subconsultas en SELECT y funciones agregadas: Asegúrate de que la subconsulta esté dentro de una cláusula como WHERE, HAVING, o FROM para evitar errores relacionados con el uso incorrecto de funciones agregadas.
   -- Error: Incorrect usage of aggregate functions in the main query.
   SELECT AVG(precio) FROM (SELECT precio FROM productos WHERE precio > AVG(precio)) AS subconsulta;
  1. Subconsultas con IN y NOT IN: Al usar IN o NOT IN, asegúrate de que la subconsulta devuelva una lista de valores válidos.
   -- Error: Subquery in NOT IN returns a single value instead of a list.
   SELECT nombre_producto FROM productos WHERE precio NOT IN (SELECT AVG(precio) FROM productos);
  1. Subconsultas con EXISTS y NOT EXISTS: Estos cláusulas buscan la presencia de datos en una subconsulta, asegúrate de que la subconsulta devuelva un valor booleano.
   -- Error: Subquery in EXISTS returns a value instead of a boolean.
   SELECT nombre_producto FROM productos WHERE EXISTS (SELECT 1 FROM ventas WHERE producto_id = p.id);

Checklist accionable

  1. Entiende el contexto: Analiza bien las condiciones y los datos que se están utilizando en la subconsulta.
  2. Usa cláusulas adecuadas: Asegúrate de usar IN, NOT IN, EXISTS, o NOT EXISTS según sea necesario para obtener los resultados deseados.
  3. Prueba las subconsultas por separado: Antes de integrarlas en la consulta principal, prueba cada subconsulta individualmente para asegurarte que devuelven lo esperado.
  4. Mantén el código legible: Utiliza alias y nombres claros para las columnas resultantes de las subconsultas.
  5. Evita subconsultas innecesarias: Si puedes realizar la misma operación sin una subconsulta, hazlo directamente en la consulta externa.

Siguientes pasos

  • Profundiza en el uso de IN y NOT IN: Aprende a utilizar estas cláusulas para obtener resultados más precisos.
  • Explora el uso de EXISTS y NOT EXISTS: Estas cláusulas son útiles para comprobar la existencia de datos en una subconsulta.
  • Practica con datasets reales: Aplica las subconsultas a conjuntos de datos reales para mejorar tu comprensión y habilidades.

Aprender a utilizar subconsultas efectivamente es un paso crucial hacia ser un experto en ciencia de datos. Las subconsultas te permiten realizar análisis más complejos y filtrar datos con mayor precisión, lo que es esencial para obtener insights valiosos desde los grandes volúmenes de datos estructurados.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).