Underfrågor i SQL

Obs!: Vi vill kunna erbjuda dig bästa möjliga supportinnehåll så fort som möjligt och på ditt språk. Den här sidan har översatts med hjälp av automatiserad översättning och kan innehålla grammatiska fel eller andra felaktigheter. Vår avsikt är att den här informationen ska vara användbar för dig. Vill du berätta för oss om informationen är till hjälp längst ned på sidan? Här är artikeln på engelska som referens.

En underfråga är ett SELECT-uttryck inuti en SELECT-, SELECT... INFOGA... INTO, ta bort eller UPDATE-uttryck eller i en annan underfråga.

Syntax

Du kan använda tre olika sätt för att skapa en underfråga:

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

uttryck [NOT] I (sqlstatement)

[NOT] EXISTS (sqlstatement)

En underfråga består av följande syntaktiska element:

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 resultatet av underfrågan genomsöks.

sql-instruktion

Ett SELECT-uttryck regler och samma format som andra SELECT-uttryck. Det måste omges av parenteser.


Kommentarer

Du kan använda en underfråga i stället för ett uttryck i fältlistan i 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 en eller flera specifika värden som ska utvärderas i en WHERE- eller HAVING-sats.

Använda predikaten alla eller vissa som är synonymt att hämta poster i huvudsakliga frågan som uppfyller jämförelsen med poster som hämtats i underfrågan. Följande exempel returnerar alla produkter vars Enhetspris är större än priset för alla produkter som sålts med en rabatt på 25 procent eller mer:

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

Använda alla predikaten för att bara poster som uppfyller jämförelsen med alla poster som hämtats i underfrågan i huvudsakliga frågan. Om du ändrar ANY till ALL i föregående exempel, returnerar frågan endast de produkter vars Enhetspris är större än värdet av alla produkter som sålts med en rabatt på 25 procent eller mer. Det här är mycket mer restriktivt.

Använda tum predikaten för att hämta de posterna i huvudsakliga frågan som någon post i underfrågan innehåller ett lika värde. Följande exempel returnerar 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 hämta de posterna i huvudsakliga frågan som ingen post i underfrågan innehåller ett lika värde.

Använda predikaten EXISTS (med valfritt inte reserverade ordet) i SANT/FALSKT jämförelser för att avgöra om underfrågan innehåller några poster.

Du kan också använda olika namn tabellalias 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å de anställda vars löner är lika med eller större än den genomsnittliga lönen för alla anställda med samma befattning. Tabellen Anställda använder 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 kan användas i korsfrågor – som predikaten (de i WHERE-satsen). Underfrågor som resultat (i SELECT-listan) är inte tillåtna i korsfrågor.



Utöka dina Office-kunskaper
Utforska utbildning
Få nya funktioner först
Anslut till Office Insiders

Hade du nytta av den här informationen?

Tack för din feedback!

Tack för din feedback! Det låter som att det kan vara bra att koppla dig till en av våra Office-supportrepresentanter.

×