En delspørring er en SELECT-setning nestet i en SELECT, SELECT... INTO, INSERT... INTO, DELETE eller UPDATE-setning eller i en annen delspørring.

Syntaks

Du kan bruke tre former for syntaks til å opprette en delspørring:

comparison [ANY | ALLE | SOME] (sqlstatement)

expression [NOT] IN (sqlstatement)

[IKKE] EXISTS (sqlstatement)

En delspørring har følgende deler:

Del

Beskrivelse

Sammenligning

En uttrykk og en sammenligningsoperator som sammenligner uttrykket med resultatene av delspørringen.

uttrykk

Et uttrykk som resultatsettet for delspørringen søkes etter.

sqlstatement

En SELECT-setning som følger samme format og regler som alle andre SELECT-setninger. Den må være omsluttet av parenteser.


Kommentarer

Du kan bruke en delspørring i stedet for et uttrykk i feltlisten for en SELECT-setning eller i en WHERE- eller HAVING-setningsdel. I en delspørring bruker du en SELECT-setning til å angi et sett med én eller flere bestemte verdier som skal evalueres i WHERE- eller HAVING-setningsuttrykket.

Bruk ANY- eller SOME-predikatet, som er synonymt, til å hente poster i hovedspørringen som oppfyller sammenligningen med eventuelle poster som hentes i delspørringen. Følgende eksempel returnerer alle produkter der enhetsprisen er større enn for et produkt som selges med en rabatt på 25 prosent eller mer:

SELECT * FROM Products WHERE UnitPrice > ANY (SELECT UnitPrice FROM OrderDetails WHERE Discount >= .25);

Bruk ALL-predikatet til å hente bare de postene i hovedspørringen som oppfyller sammenligningen med alle postene som hentes i delspørringen. Hvis du endret ANY til ALL i forrige eksempel, returnerer spørringen bare de produktene der enhetsprisen er større enn for alle produkter som ble solgt med en rabatt på 25 prosent eller mer. Dette er mye mer restriktivt.

Bruk IN-predikatet til å hente bare de postene i hovedspørringen som en post i delspørringen inneholder en lik verdi for. Følgende eksempel returnerer alle produkter med en rabatt på 25 prosent eller mer:

SELECT * FROM Products WHERE ProductID IN (SELECT ProductID FROM OrderDetails WHERE Discount >= .25);

Du kan derimot bruke NOT IN til å hente bare de postene i hovedspørringen som ingen poster i delspørringen inneholder en lik verdi for.

Bruk EXISTS-predikatet (med det valgfrie IKKE reserverte ordet) i sann/usann-sammenligninger for å avgjøre om delspørringen returnerer poster.

Du kan også bruke tabellnavnaliaser i en delspørring for å referere til tabeller som er oppført i en FROM-setning utenfor delspørringen. Følgende eksempel returnerer navnene på ansatte som har en lønn som er lik eller større enn gjennomsnittslønnen til alle ansatte som har samme stilling. Ansatte-tabellen får aliaset «T1»:

SELECT LastName, FirstName, Title, Salary FROM Employees AS T1 WHERE Salary >= (SELECT Avg(Salary) FROM Employees WHERE T1.Title = Employees.Title) Order by Title;

I det foregående eksemplet er AS- reservert ord valgfritt.

Noen delspørringer er tillatt i krysstabellspørringer – spesielt som predikater (de i WHERE-setningsdelen). Delspørringer som utdata (de i SELECT-listen) er ikke tillatt i krysstabellspørringer.



Trenger du mer hjelp?

Utvid ferdighetene dine
Utforsk opplæring
Vær først ute med de nye funksjonene
Bli med i Microsoft Office Insider-deltakere

Var denne informasjonen nyttig?

Hvor fornøyd er du med språkkvaliteten?
Hva påvirket opplevelsen din?

Takk for tilbakemeldingen!

×