SQL Server-subquery
Samenvatting: in deze tutorial leert u over de SQL Server-subquery en hoe u de subquery kunt gebruiken voor het opvragen van gegevens.
Inleiding tot SQL Server-subquery
Een subquery is een query die is genest in een andere instructie, zoals SELECT
, INSERT
, UPDATE
, of DELETE
.
Laten we het volgende voorbeeld bekijken.
Beschouw de orders
en customers
tabellen uit de voorbeelddatabase.
De volgende instructie laat zien hoe je een subquery gebruikt in de WHERE
-clausule van een SELECT
statement om de verkooporders te vinden van de klanten die zich bevinden in New York
:
Hier is het resultaat:
In dit voorbeeld is de volgende instructie een subquery:
Code language: SQL (Structured Query Language) (sql)
Merk op dat je altijd de SELECT
query van een subquery tussen haakjes ()
.
Een subquery wordt ook wel een inner query of inner select genoemd, terwijl de instructie die de subquery bevat een buitenste selectie of buitenste vraag:
SQL De server voert het bovenstaande voorbeeld van de hele query als volgt uit:
Ten eerste voert het de subquery uit om een lijst met klantidentificatienummers te krijgen van de klanten die zich in New York
bevinden.
Code language: SQL (Structured Query Language) (sql)
Ten tweede vervangt SQL Server klantidentificatienummers die worden geretourneerd door de subquery in de IN
-operator en voert de buitenste query uit om de uiteindelijke resultatenset te krijgen.
Zoals je kunt s ee, door de subquery te gebruiken, kunt u twee stappen combineren. Door de subquery is het niet meer nodig om de klantidentificatienummers te selecteren en deze in de buitenste query te pluggen. Bovendien wordt de query zelf automatisch aangepast wanneer de klantgegevens veranderen.
Nest-subquery
Een subquery kan worden genest in een andere subquery. SQL Server ondersteunt maximaal 32 nesten. Beschouw het volgende voorbeeld:
Ten eerste, SQL Server voert de volgende subquery uit om een lijst met merkidentificatienummers op te halen van de merken Strider
en Trek
:
Ten tweede berekent SQL Server de gemiddelde prijslijst van alle producten die aan die merken.
Code language: SQL (Structured Query Language) (sql)
Ten derde vindt SQL Server de producten waarvan de catalogusprijs hoger is dan de gemiddelde catalogusprijs van alle producten met de Strider
of Trek
brand.
SQL Server-subquerytypen
U kunt een subquery op veel plaatsen gebruiken:
- In plaats van een uitdrukking
- Met
IN
ofNOT IN
- Met
ANY
ofALL
- Met
EXISTS
ofNOT EXISTS
- In
UPDATE
,DELETE
, ofINSERT
statement - In de
FROM
clausule
SQL Server-subquery wordt gebruikt in plaats van een uitdrukking
Als een subquery een enkele waarde retourneert, kan deze overal worden gebruikt waar een uitdrukking wordt gebruikt.
In het volgende voorbeeld wordt een subquery gebruikt als een kolomexpressie genaamd max_list_price
in een SELECT
instructie.
SQL Server-subquery wordt gebruikt met IN-operator
Een subquery die wordt gebruikt met de IN
operator retourneert een set van nul of meer waarden. Nadat de subquery waarden heeft geretourneerd, maakt de buitenste query er gebruik van.
Met de volgende query worden de namen gevonden van alle mountainbikes en racefietsenproducten die de Bike Stores verkopen.
Deze zoekopdracht wordt in twee stappen geëvalueerd:
- Eerst retourneert de innerlijke zoekopdracht een lijst met categorie-identificatienummers die overeenkomen met de namen
Mountain Bikes
encode
Racefietsen. - Ten tweede worden deze waarden vervangen door de buitenste zoekvraag die de productnamen met het categorie-identificatienummer overeenkomt met een van de waarden in de lijst.
SQL Server-subquery wordt gebruikt met ELKE operator
De subquery wordt geïntroduceerd met de ANY
-operator heeft de volgende syntaxis:
Code language: SQL (Structured Query Language) (sql)
Ervan uitgaande dat de subquery een lijst met waarden v1, v2,… vn retourneert. De ANY
operator retourneert TRUE
als een van een vergelijkingspaar (scalar_expression
, vi) evalueert naar TRUE
; anders retourneert het FALSE
.
Met de volgende zoekopdracht worden bijvoorbeeld de producten gevonden waarvan de catalogusprijzen groter zijn dan of gelijk zijn aan de gemiddelde catalogusprijs van een productmerk .
Voor elk merk is de subquery vindt de maximale catalogusprijs. De buitenste query gebruikt deze maximale prijzen en bepaalt welke catalogusprijs van een afzonderlijk product hoger is dan of gelijk is aan de maximale catalogusprijs van een merk.
SQL Server-subquery wordt gebruikt met de operator ALL
De ALL
operator heeft dezelfde syntaxis als de ANY
operator:
Code language: SQL (Structured Query Language) (sql)
De ALL
operator retourneert TRUE
als alle vergelijkingsparen (scalar_expression
, vi) evalueren als TRUE
; anders retourneert het FALSE
.
Met de volgende zoekopdracht worden de producten gevonden waarvan de catalogusprijs groter is dan of gelijk is aan de gemiddelde catalogusprijs die wordt geretourneerd door de subquery:
SQL Server-subquery wordt gebruikt met EXISTS of NIET EXISTS
Het volgende illustreert de syntaxis van een subquery die is geïntroduceerd met de EXISTS
operator:
Code language: SQL (Structured Query Language) (sql)
De EXISTS
operator retourneert TRUE
als de subquery resultaten retourneert; anders retourneert het FALSE
.
Aan de andere kant is de NOT EXISTS
het tegenovergestelde van de EXISTS
operator.
Met de volgende zoekopdracht worden de klanten gevonden die in 2017 producten hebben gekocht:
Als u de NOT EXISTS
gebruikt in plaats van EXISTS
kunt u de klanten vinden die in 2017 geen producten hebben gekocht.
SQL Server-subquery in de FROM-component
Stel dat u het gemiddelde wilt vinden van de som van de bestellingen van al het verkooppersoneel. Om dit te doen, kunt u eerst het aantal bestellingen per staf vinden:
Vervolgens kunt u de functie AVG()
toepassen op deze resultatenset. Aangezien een query een resultatenset retourneert die eruitziet als een virtuele tabel, kunt u de hele query in de FROM
-clausule van een andere query als volgt plaatsen:
De zoekopdracht die u in de FROM
clausule moet een tabelalias hebben. In dit voorbeeld hebben we de t gebruikt als de tabelalias voor de subquery. Om tot het eindresultaat te komen voert SQL Server de volgende stappen uit:
- Voer de subquery uit in de
FROM
clausule. - Gebruik het resultaat van de subquery en voer de buitenste query uit.
In deze tutorial heb je geleerd over het SQL Server-subqueryconcept en hoe je verschillende typen subquerys kunt gebruiken om gegevens op te vragen.