Underfråga (Subquery)

En underfråga eller nästlad fråga är en fråga inuti en annan och den är ofta inbäddad i en WHERE-sats. Den måste inneslutas av ett par parenteser. Underfrågor används för att returnera data som kommer att användas i huvudfrågan som ett villkor för att ytterligare begränsa data som ska visas. Satserna SELECT, INSERT, UPDATE och DELETE, kan användas med underfrågor, tillsammans med operatorerna like =, <, >, >=, <=, IN, BETWEEN etc. INSERT-satsen använder data som returneras från en underfråga för att lägga in i en annan tabell.

En ORDER BY kan inte användas i en underfråga trots att huvudfrågan kan använda den. GROUP BY kan användas för att utföra samma funktion som ORDER BY i en underfråga. Underfrågor som returnerar fler än en rad kan bara användas med operatorer med fler värden som IN-operatorn. Operatorn BETWEEN kan inte användas med en underfråga, men däremot inuti underfrågan.

SELECT

Om vi förutsätter att medelåldern för en grupp människor är 43 år och vi vill visa alla som är äldre än snittet, skriver vi så här:

SELECT
    Namn,
    Age
FROM
    Personer
WHERE
    Age > 43;

I normala fall behöver vi dock räkna ut medelåldern och då kan vi använda oss av en underfråga i WHERE-satsen:

SELECT
    Namn,
    Age
FROM
    Personer
WHERE
    Age > (SELECT
               AVG(Age)
           FROM
               Personer);

I stället för att skriva 43 använder vi här en underfråga som returnerar medelåldern.

Man behöver inte använda aggregatfunktioner

select 
    Name, 
    Age
From 
    Personer
where 
    Age > (SELECT
        Age
    From
        Personer
    where
    Name= 'Suzanne');

Här visas alla personer som är äldre än Suzanne.

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *