SQL Server-forespørgsel

Oversigt: I denne vejledning lærer du om SQL Server-underforespørgsel, og hvordan du bruger underforespørgslen til forespørgsel på data. > Introduktion til SQL Server-underforespørgsel

En underforespørgsel er en forespørgsel, der er indlejret i en anden sætning såsom SELECT, INSERT, UPDATE eller DELETE.

Lad os se følgende eksempel.

Overvej orders og customers tabeller fra eksempeldatabasen.

Følgende udsagn viser, hvordan du bruger en underforespørgsel i WHERE -sætningen til en SELECT erklæring for at finde salgsordrer fra de kunder, der finder i New York:

Her er resultatet:

I dette eksempel er følgende udsagn en underforespørgsel:

Code language: SQL (Structured Query Language) (sql)

Bemærk, at du altid skal vedlægge SELECT forespørgsel om en underforespørgsel i parentes ().

En underforespørgsel kaldes også en indre forespørgsel eller indre markering, mens udsagnet, der indeholder underforespørgslen, kaldes en ydre valg eller ydre forespørgsel:

SQL Server udfører hele forespørgselseksemplet ovenfor som følger:

Først udfører den underforespørgslen for at få en liste over kundeidentifikationsnumre på de kunder, der finder i New York.

Code language: SQL (Structured Query Language) (sql)

For det andet erstatter SQL Server kundeidentifikationsnumre, der returneres af underforespørgslen i IN -operatoren og udfører den ydre forespørgsel for at få det endelige resultatsæt.

Som du kan s ee, ved at bruge underforespørgslen kan du kombinere to trin sammen. Underforespørgslen fjerner behovet for at vælge kundeidentifikationsnumre og tilslutte dem til den ydre forespørgsel. Desuden tilpasser selve forespørgslen automatisk, hver gang kundedataene ændres.

Indlejrende underforespørgsel

En underforespørgsel kan indlejres i en anden underforespørgsel. SQL Server understøtter op til 32 niveauer af indlejring. Overvej følgende eksempel:

Først, SQL Server udfører følgende underforespørgsel for at få en liste over mærkeidentifikationsnumre for mærkerne Strider og Trek:

For det andet beregner SQL Server den gennemsnitlige prisliste for alle produkter, der hører til til disse mærker.

Code language: SQL (Structured Query Language) (sql)

For det tredje finder SQL Server de produkter, hvis listepris er højere end den gennemsnitlige listepris for alle produkter med Strider eller Trek brand.

SQL Server-underforespørgselstyper

Du kan bruge en underforespørgsel mange steder:

  • I stedet for et udtryk
  • Med IN eller NOT IN
  • Med ANY eller ALL
  • Med EXISTS eller NOT EXISTS
  • I UPDATE, DELETE, eller INSERT udsagn
  • I FROM -sætningen

SQL Server-underforespørgsel bruges i stedet for et udtryk

Hvis en underforespørgsel returnerer en enkelt værdi, kan den bruges hvor som helst et udtryk bruges.

I det følgende eksempel bruges en underforespørgsel som en kolonneudtryk med navnet max_list_price i en SELECT udsagn.

SQL Server-underforespørgsel bruges med IN-operator

En underforespørgsel, der bruges med IN returnerer et sæt med nul eller flere værdier. Når underforespørgslen har returneret værdier, bruger den ydre forespørgsel dem.

Den følgende forespørgsel finder navnene på alle mountainbikes og landevejscykler, som cykelbutikkerne sælger.

Denne forespørgsel evalueres i to trin:

  1. Først returnerer den indre forespørgsel en liste over kategoriidentifikationsnumre, der matcher navnene Mountain Bikes og code Road Bikes.
  2. For det andet erstattes disse værdier i den ydre forespørgsel, der finder produktnavne, der har kategoriidentifikationsnummeret, svarer til en af værdierne på listen.

SQL Server-underforespørgsel bruges med ALLE operatører

Underforespørgslen introduceres med ANY operatøren har følgende syntaks:

Code language: SQL (Structured Query Language) (sql)

Forudsat at underforespørgslen returnerer en liste med værdi v1, v2,… vn. ANY operatøren returnerer TRUE hvis en af et sammenligningspar (scalar_expression, vi) evaluerer til TRUE; Ellers returnerer den FALSE.

F.eks. finder følgende forespørgsel produkter, hvis listepriser er større end eller lig med den gennemsnitlige listepris for et produktmærke .

For hvert mærke, underforespørgslen finder den maksimale listepris. Den ydre forespørgsel bruger disse maksimale priser og bestemmer, hvilket enkelt produkts listepris er større end eller lig med ethvert brands maksimale listepris.

SQL Server-forespørgsel bruges med ALL-operatør

ALL operator har samme syntaks som ANY operator:

Code language: SQL (Structured Query Language) (sql)

ALL operatoren returnerer TRUE hvis alle sammenligningspar (scalar_expression, vi) vurderes til TRUE; Ellers returnerer den FALSE.

Følgende forespørgsel finder de produkter, hvis listepris er større end eller lig med den gennemsnitlige listepris, der returneres af underforespørgslen:

SQL Server-underforespørgsel bruges med EXISTS eller NOT EKSISTER

Følgende illustrerer syntaksen for en underforespørgsel introduceret med EXISTS operator:

Code language: SQL (Structured Query Language) (sql)

EXISTS operatøren returnerer TRUE, hvis resultatet af underforespørgslen resulterer; ellers returnerer den FALSE.

På den anden side er NOT EXISTS modsat EXISTS -operatør.

Følgende forespørgsel finder de kunder, der købte produkter i 2017:

Hvis du bruger NOT EXISTS i stedet for EXISTS, du kan finde de kunder, der ikke købte nogen produkter i 2017.

SQL Server-underforespørgsel i FROM-klausulen

Antag, at du vil finde gennemsnittet af summen af ordrer for alle sælgere. For at gøre dette kan du først finde antallet af ordrer efter stabe:

Derefter kan du anvende AVG() -funktionen til dette resultatsæt. Da en forespørgsel returnerer et resultatsæt, der ligner en virtuel tabel, kan du placere hele forespørgslen i FROM -sætningen i en anden forespørgsel som denne:

Forespørgslen, du placerer i FROM klausul skal have et tabelalias. I dette eksempel brugte vi t som tabelalias for underforespørgslen. For at komme med det endelige resultat udfører SQL Server følgende trin:

  • Udfør underforespørgslen i FROM -klausulen.
  • Brug resultatet af underforespørgslen, og udfør den ydre forespørgsel.

I denne vejledning har du lært om SQL Server-underforespørgselskonceptet, og hvordan man bruger forskellige underforespørgselstyper til at forespørge data.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *