Aprende a utilizar subconsultas o subquery en SQL
Una subconsulta es una declaración SQL que tiene otra consulta SQL incrustada en la cláusula WHERE o HAVING.
Sintaxis
La sintaxis de una subconsulta en SQL cuando el subquery o subconsulta forma parte de la condición WHERE es la siguiente:
SELECT "column_name1"
FROM "table_name1"
WHERE "column_name2" [Operador de Comparación]
(SELECT "column_name3"
FROM "table_name2"
WHERE "condición");
[Operador de comparación] podría ser operadores de igualdad como =,>, <,> =, <=. También puede ser un operador de texto como "LIKE". La parte entre paréntesis se considera como la "consulta interna, subconsulta o subquery", mientras que la parte que no está entre paréntesis se considera como la "consulta externa".
Ejemplos
Usamos la tabla Products de base de datos Northwind que hemos estado utilizando y la pueden descargar en esta liga.
Tabla Products:
|
|
Como la tabla es muy grande la divide en dos, en total tiene 77 registros.
La otra tabla es Categories:
CategoryID
|
CategoryName
|
Description
|
1
|
Beverages
|
Soft drinks, coffees, teas, beers, and ales
|
2
|
Condiments
|
Sweet and savory sauces, relishes, spreads, and seasonings
|
3
|
Confections
|
Desserts, candies, and sweet breads
|
4
|
Dairy Products
|
Cheeses
|
5
|
Grains/Cereals
|
Breads, crackers, pasta, and cereal
|
6
|
Meat/Poultry
|
Prepared meats
|
7
|
Produce
|
Dried fruit and bean curd
|
8
|
Seafood
|
Seaweed and fish
|
Subconsulta o subquery
Para usar una subconsulta para encontrar los productos de las categorías Beverages, usamos la siguiente declaración SQL:
SELECT ProductID, ProductName, CategoryID FROM Products where CategoryID in (SELECT CategoryID FROM Categories where CategoryName='Beverages')
Resultado
ProductID
|
ProductName
|
CategoryID
|
1
|
Chai
|
1
|
2
|
Chang
|
1
|
24
|
Guaraná Fantástica
|
1
|
34
|
Sasquatch Ale
|
1
|
35
|
Steeleye Stout
|
1
|
38
|
Côte de Blaye
|
1
|
39
|
Chartreuse verte
|
1
|
43
|
Ipoh Coffee
|
1
|
67
|
Laughing Lumberjack Lager
|
1
|
70
|
Outback Lager
|
1
|
75
|
Rhönbräu Klosterbier
|
1
|
76
|
Lakkalikööri
|
1
|
En este ejemplo, en lugar de unir las dos tablas directamente con un JOIN y luego obtener solo las que cumplen con la condición, primero usamos la subconsulta para averiguar qué Id tiene la categoría de Beverages, y obtenemos los productos que cumplen con esa categoría en particular.