Introducción

Las subconsultas, también conocidas como consultas anidadas, son consultas SQL que se encuentran dentro de otra consulta SQL. Son una herramienta poderosa que permite realizar consultas complejas y obtener resultados específicos que no se pueden lograr fácilmente con una sola consulta.

Conceptos Clave

  1. Subconsulta: Una consulta dentro de otra consulta.
  2. Consulta externa: La consulta principal que contiene la subconsulta.
  3. Subconsulta escalar: Devuelve un solo valor.
  4. Subconsulta de fila: Devuelve una sola fila con múltiples columnas.
  5. Subconsulta de tabla: Devuelve múltiples filas y columnas.

Tipos de Subconsultas

Subconsultas en la Cláusula SELECT

Las subconsultas pueden ser utilizadas en la cláusula SELECT para calcular valores específicos.

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

Subconsultas en la Cláusula WHERE

Las subconsultas en la cláusula WHERE se utilizan para filtrar resultados basados en los resultados de otra consulta.

SELECT 
    employee_id, 
    first_name, 
    last_name
FROM 
    employees
WHERE 
    department_id = (SELECT department_id 
                     FROM departments 
                     WHERE department_name = 'Sales');

Subconsultas en la Cláusula FROM

Las subconsultas en la cláusula FROM permiten tratar el resultado de una subconsulta como una tabla temporal.

SELECT 
    sub.employee_id, 
    sub.first_name, 
    sub.last_name
FROM 
    (SELECT 
         employee_id, 
         first_name, 
         last_name 
     FROM 
         employees 
     WHERE 
         salary > 50000) AS sub;

Ejemplos Prácticos

Ejemplo 1: Subconsulta Escalar

Encuentra el nombre del departamento para cada empleado.

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

Ejemplo 2: Subconsulta en la Cláusula WHERE

Encuentra los empleados que trabajan en el departamento de 'Marketing'.

SELECT 
    employee_id, 
    first_name, 
    last_name
FROM 
    employees
WHERE 
    department_id = (SELECT department_id 
                     FROM departments 
                     WHERE department_name = 'Marketing');

Ejemplo 3: Subconsulta en la Cláusula FROM

Encuentra los empleados con un salario superior a 60,000 y muestra sus detalles.

SELECT 
    sub.employee_id, 
    sub.first_name, 
    sub.last_name
FROM 
    (SELECT 
         employee_id, 
         first_name, 
         last_name 
     FROM 
         employees 
     WHERE 
         salary > 60000) AS sub;

Ejercicios Prácticos

Ejercicio 1: Subconsulta Escalar

Encuentra el nombre del gerente para cada empleado.

SELECT 
    employee_id,
    (SELECT first_name 
     FROM employees AS mgr 
     WHERE mgr.employee_id = employees.manager_id) AS manager_name
FROM 
    employees;

Ejercicio 2: Subconsulta en la Cláusula WHERE

Encuentra los empleados que trabajan en el departamento con el ID más alto.

SELECT 
    employee_id, 
    first_name, 
    last_name
FROM 
    employees
WHERE 
    department_id = (SELECT MAX(department_id) 
                     FROM departments);

Ejercicio 3: Subconsulta en la Cláusula FROM

Encuentra los empleados cuyo salario es mayor que el salario promedio de todos los empleados.

SELECT 
    emp.employee_id, 
    emp.first_name, 
    emp.last_name
FROM 
    employees AS emp
WHERE 
    emp.salary > (SELECT AVG(salary) 
                  FROM employees);

Soluciones a los Ejercicios

Solución 1

SELECT 
    employee_id,
    (SELECT first_name 
     FROM employees AS mgr 
     WHERE mgr.employee_id = employees.manager_id) AS manager_name
FROM 
    employees;

Solución 2

SELECT 
    employee_id, 
    first_name, 
    last_name
FROM 
    employees
WHERE 
    department_id = (SELECT MAX(department_id) 
                     FROM departments);

Solución 3

SELECT 
    emp.employee_id, 
    emp.first_name, 
    emp.last_name
FROM 
    employees AS emp
WHERE 
    emp.salary > (SELECT AVG(salary) 
                  FROM employees);

Conclusión

Las subconsultas son una herramienta esencial en SQL que permiten realizar consultas complejas y específicas. Al dominar las subconsultas, puedes escribir consultas más eficientes y efectivas en BigQuery. En el próximo tema, exploraremos las Expresiones de Tabla Comunes (CTEs), que son otra técnica poderosa para estructurar y simplificar consultas complejas.

Curso de BigQuery

Módulo 1: Introducción a BigQuery

Módulo 2: SQL Básico en BigQuery

Módulo 3: SQL Intermedio en BigQuery

Módulo 4: SQL Avanzado en BigQuery

Módulo 5: Gestión de Datos en BigQuery

Módulo 6: Optimización del Rendimiento de BigQuery

Módulo 7: Seguridad y Cumplimiento en BigQuery

Módulo 8: Integración y Automatización de BigQuery

Módulo 9: Machine Learning en BigQuery (BQML)

Módulo 10: Casos de Uso de BigQuery en el Mundo Real

© Copyright 2024. Todos los derechos reservados