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_Name  Sales  Txn_Date 
 Los Angeles 1500  05-Jan-1999 
 San Diego 250  07-Jan-1999 
 Los Angeles 300  08-Jan-1999 
 Boston 700  08-Jan-1999 

Tabel Geography
 Region_Name  Store_Name 
 East  Boston 
 East  New York 
 West  Los Angeles 
 West  San 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 >>

Deze pagina is voor het laatst bijgewerkt op 13-06-2022



Copyright © 2022   1keydata.com   Alle rechten voorbehouden