SQL Server-undersøkelse
Sammendrag: i denne opplæringen vil du lære om SQL Server-undersøket og hvordan du bruker undersøket til å spørre om data.
Introduksjon til SQL Server-undersøking
Et underspørsmål er et spørsmål som er nestet i en annen setning som SELECT
, INSERT
, UPDATE
, eller DELETE
.
La oss se følgende eksempel.
Vurder orders
og customers
tabeller fra eksempeldatabasen.
Følgende uttalelse viser hvordan du bruker et underspørsmål i WHERE
-satsen til en SELECT
uttalelse for å finne salgsordrene til kundene som finner i New York
:
Her er resultatet:
I dette eksemplet er følgende utsagn en underforespørsel:
Code language: SQL (Structured Query Language) (sql)
Merk at du alltid må legge ved SELECT
forespørsel om en underspørring i parentes ()
.
Et underspørsmål er også kjent som et indre spørsmål eller indre valg mens setningen som inneholder underspørringen kalles en ytre valg eller ytre spørring:
SQL Server utfører hele spørreeksemplet ovenfor som følger:
Først utfører den undersøket for å få en liste over kundeidentifikasjonsnumre til kundene som finner i New York
.
Code language: SQL (Structured Query Language) (sql)
For det andre erstatter SQL Server kundeidentifikasjonsnumre som returneres av underspørringen i IN
-operatøren og utfører den ytre spørringen for å få det endelige resultatsettet.
Som du kan s ee, ved å bruke undersøket, kan du kombinere to trinn sammen. Delspørringen fjerner behovet for å velge kundeidentifikasjonsnummer og koble dem til det ytre spørringen. Videre tilpasser selve spørringen seg automatisk når kundedataene endres.
Nestende spørring
Et undersøk kan nestes i et annet underspørsmål. SQL Server støtter opptil 32 nivåer av hekking. Tenk på følgende eksempel:
Først, SQL Server utfører følgende underspørring for å få en liste over merkeidentifikasjonsnummer for merkene Strider
og Trek
:
For det andre beregner SQL Server gjennomsnittlig prisliste for alle produkter som hører til til disse merkene.
Code language: SQL (Structured Query Language) (sql)
For det tredje finner SQL Server produktene hvis listepris er høyere enn gjennomsnittlig listepris for alle produkter med Strider
eller Trek
-merke.
SQL Server-undersøketyper
Du kan bruke et underspørsmål mange steder:
- I stedet for et uttrykk
- Med
IN
ellerNOT IN
- Med
ANY
ellerALL
- Med
EXISTS
ellerNOT EXISTS
- I
UPDATE
,DELETE
, ellerINSERT
-uttalelse - I
FROM
-klausul
SQL Server-underspørring brukes i stedet for et uttrykk
Hvis et underspørsmål returnerer en enkelt verdi, kan det brukes hvor som helst et uttrykk brukes.
I det følgende eksemplet brukes et undersøk som kolonneuttrykk kalt max_list_price
i en SELECT
uttalelse.
SQL Server-underforespørsel brukes med IN-operatør
Et underspørsmål som brukes med IN
returnerer et sett med null eller flere verdier. Etter at undersøket har returnert verdier, bruker den ytre spørringen dem.
Følgende søk finner navnene på alle terrengsykler og landeveissykler som sykkelbutikkene selger.
Dette spørsmålet blir evaluert i to trinn:
- For det første returnerer den indre spørringen en liste over kategoriidentifikasjonsnumre som samsvarer med navnene
Mountain Bikes
ogcode
landeveissykler. - For det andre erstattes disse verdiene i den ytre spørringen som finner produktnavnene som har kategorien identifikasjonsnummer samsvarer med en av verdiene i listen.
SQL Server-spørring brukes med ALLE operatører
Delspørringen introduseres med ANY
operatøren har følgende syntaks:
Code language: SQL (Structured Query Language) (sql)
Forutsatt at undersøket returnerer en liste over verdien v1, v2,… vn. ANY
-operatøren returnerer TRUE
hvis en av et sammenligningspar (scalar_expression
, vi) evaluerer til TRUE
; Ellers returnerer den FALSE
.
For eksempel finner følgende spørring produktene hvis listepriser er større enn eller lik den gjennomsnittlige listeprisen for et produktmerke. .
For hvert merke, undersøket finner den maksimale listeprisen. Den ytre forespørselen bruker disse maksimale prisene og bestemmer hvilket enkelt produkts listepris som er større enn eller lik merkevarens maksimale listepris.
SQL Server-undersøk brukes med ALL-operatør
ALL
operator har samme syntaks som ANY
operator:
Code language: SQL (Structured Query Language) (sql)
ALL
-operatøren returnerer TRUE
hvis alle sammenligningspar (scalar_expression
, vi) vurderes til TRUE
; Ellers returnerer den FALSE
.
Følgende spørsmål finner produktene hvis listepris er større enn eller lik den gjennomsnittlige listeprisen som returneres av underspørringen:
SQL Server-underforespørsel brukes med EXISTS eller NOT EKSISTER
Følgende illustrerer syntaksen til et underspørsmål introdusert med EXISTS
operator:
Code language: SQL (Structured Query Language) (sql)
EXISTS
-operatøren returnerer TRUE
hvis undersøket returnerer; Ellers returnerer den FALSE
.
På den annen side er NOT EXISTS
motsatt EXISTS
operatør.
Følgende spørsmål finner kundene som kjøpte produkter i 2017:
Hvis du bruker NOT EXISTS
i stedet for EXISTS
, kan du finne kundene som ikke kjøpte noen produkter i 2017.
SQL Server-underspørsel i FROM-setningen
Anta at du vil finne gjennomsnittet av bestillingssummen til alle selgere. For å gjøre dette kan du først finne antall bestillinger etter staber:
Deretter kan du bruke AVG()
-funksjonen på dette resultatsettet. Siden et spørsmål returnerer et resultatsett som ser ut som en virtuell tabell, kan du plassere hele spørringen i FROM
-satsen til en annen spørring som dette:
Søket du legger inn i FROM
paragraf må ha et tabellalias. I dette eksemplet brukte vi t som alias for tabellen. For å komme med det endelige resultatet utfører SQL Server følgende trinn:
- Utfør underspørringen i
FROM
-klausulen. - Bruk resultatet av undersøket og utfør det ytre spørringen.
I denne opplæringen har du lært om SQL Server-undersøkekonseptet og hvordan du bruker forskjellige underspørringstyper til å spørre om data.