Logga in med Microsoft
Logga in eller skapa ett konto.
Hej,
Välj ett annat konto.
Du har flera konton
Välj det konto som du vill logga in med.

En underfråga är ett SELECT-uttryck kapslat i en SELECT, SELECT... INTO, INSERT... INTO-, DELETE- eller UPDATE-instruktionen eller inuti en annan underfråga.

Syntax

Du kan använda tre former av syntax för att skapa en underfråga:

jämförelse [ANY | ALLA | SOME] (sqlstatement)

uttryck [ICKE] IN (sqlstatement)

[ICKE] EXISTS (sqlstatement)

En underfråga består av följande delar:

Element

Beskrivning

Jämförelse

En uttryck och en jämförelseoperator som jämför uttrycket med resultatet av underfrågan.

uttryck

Ett uttryck som underfrågans resultatuppsättning genomsöks för.

sql-instruktion

Ett SELECT-uttryck som följer samma format och regler som andra SELECT-uttryck. Den måste omges av parenteser.


Kommentarer

Du kan använda en underfråga i stället för ett uttryck i fältlistan för ett SELECT-uttryck eller i en WHERE- eller HAVING-sats. I en underfråga använder du ett SELECT-uttryck för att ange en uppsättning med ett eller flera specifika värden som ska utvärderas i WHERE- eller HAVING-satsuttrycket.

Använd predikatet ANY eller SOME, som är synonymt, för att hämta poster i huvudfrågan som uppfyller jämförelsen med alla poster som hämtats i underfrågan. I följande exempel returneras alla produkter vars enhetspris är större än för en produkt som säljs till en rabatt på 25 procent eller mer:

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

Använd predikatet ALL till att endast hämta de poster i huvudfrågan som uppfyller jämförelsen med alla poster som hämtats i underfrågan. Om du ändrade ANY till ALL i föregående exempel returnerar frågan endast de produkter vars enhetspris är större än för alla produkter som säljs med en rabatt på 25 procent eller mer. Detta är mycket mer restriktivt.

Använd predikatet IN för att endast hämta de poster i huvudfrågan som vissa poster i underfrågan innehåller ett likhetsvärde för. I följande exempel returneras alla produkter med en rabatt på 25 procent eller mer:

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

Däremot kan du använda NOT IN för att endast hämta de poster i huvudfrågan som ingen post i underfrågan innehåller ett lika värde för.

Använd predikatet EXISTS (med det valfria ICKE-reserverade ordet) i sant/falskt-jämförelser för att avgöra om underfrågan returnerar några poster.

Du kan också använda tabellnamnalias i en underfråga för att referera till tabeller som anges i en FROM-sats utanför underfrågan. I följande exempel returneras namnen på anställda vars löner är lika med eller högre än den genomsnittliga lönen för alla anställda som har samma befattning. Tabellen Anställda har 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 föregående exempel är AS- reserverat ord valfritt.

Vissa underfrågor är tillåtna i korsfrågor – specifikt som predikat (de i WHERE-satsen). Underfrågor som utdata (de i SELECT-listan) är inte tillåtna i korsfrågor.



Behöver du mer hjälp?

Vill du ha fler alternativ?

Utforska prenumerationsförmåner, bläddra bland utbildningskurser, lär dig hur du skyddar din enhet med mera.

Communities hjälper dig att ställa och svara på frågor, ge feedback och få råd från experter med rika kunskaper.

Hade du nytta av den här informationen?

Hur nöjd är du med språkkvaliteten?
Vad påverkade din upplevelse?
Genom att trycka på skicka, kommer din feedback att användas för att förbättra Microsofts produkter och tjänster. IT-administratören kan samla in denna data. Sekretesspolicy.

Tack för din feedback!

×