SQL Subquery para consulta

En SQL Subquery también se denomina consulta interna, consulta anidada o selección interna es una consulta anidada dentro de otra consulta. Por ejemplo, la subconsulta de SQL Server puede anidarse dentro de declaraciones SELECT, INSERT, DELETE, UPDATE o dentro de otra.

Principalmente usamos en SQL Subquery en la cláusula WHERE. Será algo así como la expresión WHERE NOT IN, o la subconsulta IN, etc. Pero también podemos hacer una subconsulta con la clausula FROM y HAVING.

Sintaxis SQL Subquery

La sintaxis básica para escribir en SQL subquery depende de la parte de la consulta principal en la que desee incrustarla. Se puede incrustar como mencionamos anteriormente dentro de las cláusulas HAVING, WHERE o FROM. Iremos aprendiendo sobre todos ellos en breve, uno por uno.

sql subquery

Parámetros en SQL Subquery

Los parámetros utilizados en las sintaxis anteriores son:

Sintaxis SQL: Subquery (Subconsulta)


SELECT columna1, columna2, ...
FROM tabla1
WHERE columna operador (SELECT columna FROM tabla2 WHERE condición);
  • SELECT column_name(s): Sirve para indicar qué columnas deseas incluir en el resultado final de la consulta. Basta con escribir los nombres de las columnas que quieres mostrar.
  • FROM: Define la tabla o la fuente desde la cual se van a recuperar los datos. En algunos casos, puede ser el resultado de una subconsulta (que actúa como tabla temporal).
  • WHERE: Permite establecer condiciones para filtrar los registros obtenidos. Si la consulta incluye una subconsulta, el filtrado se basará en la comparación entre el resultado de dicha subconsulta y los valores de la columna especificada.

Sintaxis SQL: Subquery con GROUP BY y HAVING


SELECT columna1, COUNT(*)
FROM tabla1
GROUP BY columna1
HAVING COUNT(*) > (
    SELECT AVG(total)
    FROM (
        SELECT columna2, COUNT(*) AS total
        FROM tabla2
        GROUP BY columna2
    ) AS subconsulta
);
  • GROUP BY column_name(s): Se utiliza para agrupar filas, que tienen valores similares en filas de resumen.
  • HAVING condition: Se utiliza para filtrar grupos en función de la condición especificada. En el tercer caso, el filtrado de grupos se realiza en función del resultado de la subconsulta.

Uso de subconsultas SQL Server

Las subconsultas se utilizan ampliamente para responder una pregunta dentro de otra pregunta.

Escenario:

  • Tabla Empleado: id, nombre, departamento
  • Tabla Ventas: id, id_empleado, monto_venta, fecha

Objetivo:
Obtener los nombres de los empleados que tienen ventas mayores al promedio de todos los empleados.

Ejemplo SQL: Subconsulta con promedio de ventas


SELECT nombre
FROM Empleado
WHERE id IN (
    SELECT id_empleado
    FROM Ventas
    GROUP BY id_empleado
    HAVING SUM(monto_venta) > (
        SELECT AVG(total_ventas)
        FROM (
            SELECT SUM(monto_venta) AS total_ventas
            FROM Ventas
            GROUP BY id_empleado
        ) AS sub
    )
);

sql Subquery en cláusula WHERE

Una subconsulta en la cláusula WHERE ayuda a filtrar las filas para el conjunto de resultados comparando una columna en la tabla principal con los resultados de la subconsulta. Aquí hay un ejemplo para entender las subconsultas en la cláusula WHERE.

Sintaxis SQL: Subquery en la cláusula WHERE


SELECT columna1, columna2
FROM tabla1
WHERE columna1 IN (
    SELECT columna_relacionada
    FROM tabla2
    WHERE condición
);

Las siguientes palabras clave introducen en sql subquery en la cláusula WHERE de una declaración SELECT:

Puede usar cualquier operador relacional con ALL y ANY para comparar algo con cada uno de ( ALL) o cualquiera de ( ANY) los valores que produce la subconsulta. 

Puede utilizar la palabra clave SOME en lugar de ANY. El operador IN es equivalente a = ANY. Para crear la condición de búsqueda opuesta, use la palabra clave NOT o un operador relacional diferente.

El EXISTS operador prueba una subconsulta para ver si encontró algún valor; es decir, pregunta si el resultado de la subconsulta no es nulo. No puede usar la EXISTS palabra clave en una subconsulta que contenga una columna con un tipo de datos TEXT o BYTE.

Ejemplo SQL: Subconsulta para obtener departamentos con jefes en Manhattan


SELECT nombre_departamento
FROM Departamento
WHERE id_jefe IN (
    SELECT id_empleado
    FROM Empleado
    WHERE ciudad = 'Manhattan'
);

Explicación: En el ejemplo anterior, hemos creado una condición en la cláusula WHERE que compara si el jefe del departamento es de Manhattan. Pero como tenemos toda la información relativa a las ciudades en la tabla de «empleados», tuvimos que crear una subconsulta que seleccione el ID de empleado de la tabla de «empleados» que son de «Manhattan» y luego lo compara con los ID de empleado del jefe en » tabla de departamento”.

SQL Subquery en cláusula FROM

Las subconsultas en la cláusula FROM crean una tabla derivada o intermedia que se puede usar directamente para obtener resultados para la consulta SELECT principal o se puede unir con otras tablas y luego usarse posteriormente. 

Subconsulta en cláusula FROM


SELECT sub.nombre, sub.ciudad
FROM (
    SELECT e.nombre, e.ciudad
    FROM empleado e
    JOIN cliente c ON e.ciudad = c.ciudad
) AS sub
WHERE sub.ciudad IS NOT NULL;

sql Subquery en cláusula HAVING

Una subconsulta en la cláusula HAVING ayuda a filtrar los grupos para el conjunto de resultados comparando una columna en la tabla principal con los resultados de la subconsulta. Aquí hay un ejemplo para entender las subconsultas en la cláusula HAVING.

Sintaxis SQL: Subquery en la cláusula HAVING


SELECT columna1, COUNT(*)
FROM tabla1
GROUP BY columna1
HAVING COUNT(*) > (
    SELECT AVG(total)
    FROM (
        SELECT COUNT(*) AS total
        FROM tabla1
        GROUP BY columna1
    ) AS sub
);

Ejemplo en sql subquery

Encuentre los departamentos donde el número total de empleados es mayor que el número total de empleados en Nueva Delhi.

Ejemplo SQL: Subconsulta en cláusula HAVING


SELECT d.departmentname, COUNT(e.employeeid)
FROM department AS d 
INNER JOIN employees AS e
  ON d.departmentid::varchar = e.departmentid
GROUP BY d.departmentname
HAVING COUNT(e.employeeid) > (
    SELECT COUNT(employeeid) 
    FROM employees 
    WHERE city = 'New Delhi'
);

Producción:

Explicación: En el ejemplo anterior, hemos creado una subconsulta en la cláusula HAVING. El resultado de esta subconsulta obtendrá el número total de empleados de Nueva Delhi y luego lo comparará con el número de empleados de cada departamento. Por lo tanto, nos ayudará a llegar al resultado final.

Conclusión

En sql subquery son consultas internas anidadas escritas dentro de la consulta principal. Ayudan a resolver problemas complejos. Las subconsultas son una buena alternativa a las uniones SQL, ya que aumentan la eficiencia o la velocidad.

Deja un comentario