Sub-Consultas

Como funcionan las subconsultas en SQL Server

Las subconsultas en SQL son consultas anidadas dentro de otra consulta. Permiten usar el resultado de una consulta interna como entrada para la consulta externa. Pueden mejorar la legibilidad del código y permiten realizar consultas complejas de manera más estructurada.

Tipos de Subconsultas

  1. Subconsultas Escalares:
    • Devuelven un solo valor.
    • Pueden ser usadas en el lugar donde se espera un solo valor, como en el SELECT, WHERE, o HAVING.
    • Ejemplo: SELECT empleado_id, (SELECT AVG(salario) FROM empleados WHERE departamento_id = e.departamento_id) AS salario_promedio FROM empleados e;
  2. Subconsultas de Columna Única:
    • Devuelven una columna con múltiples filas.
    • Utilizadas comúnmente con operadores como IN, NOT IN, ANY, ALL.
    • Ejemplo: SELECT nombre FROM productos WHERE categoria_id IN (SELECT categoria_id FROM categorias WHERE nombre = 'Electrónica');
  3. Subconsultas de Varias Columnas:
    • Devuelven múltiples columnas y filas.
    • Utilizadas en cláusulas como IN para comparar múltiples columnas.
    • Ejemplo: SELECT nombre FROM empleados WHERE (departamento_id, salario) IN (SELECT departamento_id, MAX(salario) FROM empleados GROUP BY departamento_id);
  4. Subconsultas Correlacionadas:
    • Se refieren a la consulta externa y son ejecutadas repetidamente para cada fila procesada por la consulta externa.
    • Ejemplo: SELECT e1.nombre FROM empleados e1 WHERE e1.salario > (SELECT AVG(e2.salario) FROM empleados e2 WHERE e2.departamento_id = e1.departamento_id);

Cómo Funcionan las Subconsultas

Las subconsultas son ejecutadas antes que la consulta principal. Sus resultados son utilizados como parámetros de entrada para la consulta externa. Dependiendo del tipo, las subconsultas pueden influir en la forma en que se filtran, agregan o seleccionan los datos.

  • Subconsultas en la Cláusula SELECT: Permiten calcular valores derivados.
  • Subconsultas en la Cláusula WHERE: Utilizadas para filtrar datos basados en el resultado de otra consulta.
  • Subconsultas en la Cláusula FROM: Tratadas como tablas derivadas, permitiendo usar los resultados de una subconsulta como una tabla temporal.

Ejemplo

Imagina que quieres encontrar todos los empleados cuyo salario es mayor que el salario promedio de su departamento. Utilizarías una subconsulta correlacionada de la siguiente manera:

SELECT e1.nombre, e1.salario
FROM empleados e1
WHERE e1.salario > (SELECT AVG(e2.salario)
                    FROM empleados e2
                    WHERE e2.departamento_id = e1.departamento_id);

En este ejemplo:

  • La subconsulta (SELECT AVG(e2.salario) FROM empleados e2 WHERE e2.departamento_id = e1.departamento_id) calcula el salario promedio de cada departamento.
  • La consulta externa compara el salario de cada empleado con el salario promedio de su respectivo departamento.

Consideraciones

  • Rendimiento: Las subconsultas correlacionadas pueden ser costosas en términos de rendimiento, ya que se ejecutan repetidamente.
  • Legibilidad: Las subconsultas pueden mejorar la legibilidad del código al dividir consultas complejas en partes manejables.
  • Alternativas: A veces, las subconsultas pueden ser reemplazadas por JOIN para mejorar el rendimiento.

9 comentarios en «Sub-Consultas»

  • el 2012-02-28 a las 00:58
    Enlace permanente

    Hay algun video o tutorial de como instalar, SQL server 2008?

    Respuesta
  • el 2012-02-28 a las 19:34
    Enlace permanente

    Hola Ing. Cardenas – Vi el video de subconsultas lo cual me parecio bastante bien y claro. Solo tengo dudas referentes al siguiente codigo:

    SELECT companyname FROM Customers WHERE EXISTS
    (SELECT * FROM Products)

    Aqui, el resultado devuelve 91 filas como si se hubiera simplemente ejecutado el query sin el subquery. Sin embargo, no deberia de mostrar el resultado de este codigo cero filas ya que el codigo esta pidiendo que devuelva cualquier companyname que aparezcan en el resultado del subquery? y al generar el subquery por si solo no devuelve nada del companyname. Gracias! el blog esta muy bueno, voy a seguir viendo los videos

    Respuesta
    • el 2012-03-06 a las 16:04
      Enlace permanente

      Lo que sucede es que cuando se usa Exists es necesario que la consulta externa le pase un parametro a la consulta interna para correlacionarlas, si no solo esta haciendo que si la consulta interna devuelve por lo menos un dato, ejecuta la consulta de afuera pero no tiene relacion una con la otra

      Respuesta
  • el 2012-03-08 a las 01:40
    Enlace permanente

    segun el video de la instalacion, a mi me da un error, justo en la pantalla que sale en el video al minuto 4:31 dice error de autentificacion…

    Respuesta

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.