SQL Subquery




  SQL > Geavanceerde SQL > Subquery

U kunt een SQL-instructie insluiten in een andere instructie. Wanneer dit gebeurt op de instructies WHERE of HAVING, is er sprake van een subquery construct.

De syntaxis is als volgt:

SELECT "kolom_naam1"
FROM "tabel_naam1"
WHERE "kolom_naam2" [Vergelijkingsoperator]
(SELECT "kolom_naam3"
FROM "tabel_naam2"
WHERE "Voorwaarde"
);

[Vergelijkingsoperator] kunnen gelijkheidsoperators zijn zoals =, >, <, >=, <=. Het kan ook een tekstoperator zijn zoals "LIKE". het gedeelte in rood wordt beschouwd als de "inner query", terwijl het gedeelte in groen wordt beschouwd als de "outer query".

Neem hetzelfde voorbeeld dat werd gebruikt ter illustratie van SQL joins:

Tabel Store_Information
Store_NameSalesTxn_Date
Los Angeles150005-Jan-1999
San Diego25007-Jan-1999
Los Angeles30008-Jan-1999
Boston70008-Jan-1999

Tabel Geography
Region_NameStore_Name
EastBoston
EastNew York
WestLos Angeles
WestSan Diego

waarbij u een subquery wenst te gebruiken om de omzet van alle winkels in de regio West te vinden. Dit kan a.d.h.v. de volgende SQL-instructie:

SELECT SUM(Sales) FROM Store_Information
WHERE Store_name IN
(SELECT store_name FROM Geography
WHERE region_name = 'West');

Resultaat:

SUM(Sales)
2050

In dit voorbeeld wordt, in plaats van de twee tabellen rechtstreeks te verbinden om vervolgens de omzet voor winkels in de regio West op te tellen, eerst een subquery gebruikt om uit te zoeken welke winkels in de regio West aanwezig zijn, om dan het totaal van de winkels in kwestie op te tellen.

In bovenstaand voorbeeld wordt eerst de inner query uitgevoerd en wordt het resultaat doorgegeven aan de outer query. Dit type subquery wordt een eenvoudige subquery genoemd. Als de inner query afhankelijk is van de outer query, is er sprake van een gecorreleerde subquery. Hierna wordt een voorbeeld van een gecorreleerde subquery gegeven:

SELECT SUM(a1.Sales) FROM Store_Information a1
WHERE a1.Store_name IN
(SELECT Store_Name FROM Geography a2
WHERE a2.Store_Name = a1.Store_Name);

Bemerk de component WHERE in de inner query, waar de voorwaarde een tabel inhoudt van de outer query.

SQL EXISTS >>



Copyright © 2014   1keydata.com   Alle rechten voorbehouden



Geavanceerde SQL
SQL UNION
SQL UNION ALL
SQL INTERSECT
SQL MINUS
SQL Subquery
SQL EXISTS
SQL CASE
SQL NULL
SQL ISNULL
SQL IFNULL
SQL NVL
SQL COALESCE
SQL NULLIF




Site-overzicht