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.

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:
- ALL
- ANY
- IN
- EXISTS
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.