I SQL er en korreleret underforespørgsel en underforespørgsel, der refererer til en kolonne fra den ydre forespørgsel. Underforespørgslen udføres gentagne gange for hver række i den ydre forespørgsel ved at bruge værdierne fra den aktuelle række til at udføre underforespørgslen. Resultatet af underforespørgslen bruges derefter i evalueringen af den ydre forespørgsel.
Korrelerede underforespørgsler bruges til række-for-række-behandling. Hver underforespørgsel udføres én gang for hver række i den ydre forespørgsel.
En korreleret underforespørgsel evalueres én gang for hver række, der behandles af den overordnede sætning. Forældererklæringen kan være en VÆLG , OPDATERING , eller SLET udmelding.
Syntaks:
VÆLG kolonne1, kolonne2, ….
FRA bord1 ydre
WHERE kolonne1 operator
(VÆLG kolonne1, kolonne2
FRA tabel 2
HVOR udtr1 =
ydre.udtr2);
En korreleret underforespørgsel er en måde at læse hver række i en tabel og sammenligne værdier i hver række med relaterede data. Den bruges, når en underforespørgsel skal returnere et andet resultat eller et sæt resultater for hver kandidatrække, der tages i betragtning af hovedforespørgslen. Med andre ord kan du bruge en korreleret underforespørgsel til at besvare et flerdelt spørgsmål, hvis svar afhænger af værdien i hver række, der behandles af den overordnede sætning.
Indlejrede underforespørgsler versus korrelerede underforespørgsler
Med en normal indlejret underforespørgsel, den indre VÆLG forespørgslen kører først og udføres én gang, og returnerer værdier, der skal bruges af hovedforespørgslen. En korreleret underforespørgsel udføres dog én gang for hver kandidatrække, der tages i betragtning af den ydre forespørgsel. Med andre ord er den indre forespørgsel drevet af den ydre forespørgsel.
BEMÆRK: Du kan også bruge NOGEN og ALLE operatør i en korreleret underforespørgsel. EKSEMPEL på korrelerede underforespørgsler: Find alle de medarbejdere, der tjener mere end gennemsnitslønnen i deres afdeling.
Forespørgsel:
SELECT last_name, salary, department_id FROM employees outer WHERE salary>(VÆLG AVG(løn) FRA medarbejdere HVOR afdeling_id = ydre.afdeling_id gruppe efter afdelings_id);>
Anden brug af korrelation er i OPDATERING og SLET
KORRELERET OPDATERING
UPDATE table1 alias1 SET column = (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column);>
Brug en korreleret underforespørgsel til at opdatere rækker i én tabel baseret på rækker fra en anden tabel.
KORRELERET SLET
DELETE FROM table1 alias1 WHERE column1 operator (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column);>
Brug en korreleret underforespørgsel til at slette rækker i én tabel baseret på rækkerne fra en anden tabel.
df loc
Brug af EXISTS-operatøren
EXISTS-operatoren tester for eksistensen af rækker i resultatsættet af underforespørgslen. Hvis en underforespørgselsrækkeværdi findes, markeres betingelsen RIGTIGT og søgningen fortsætter ikke i den indre forespørgsel, og hvis den ikke findes, markeres betingelsen FALSK og søgningen fortsætter i den indre forespørgsel.
EKSEMPEL på brug af EXIST-operator:
Find medarbejdere, der har mindst én person, der rapporterer til dem.
Forespørgsel:
SELECT employee_id, last_name, job_id, department_id FROM employees outer WHERE EXISTS ( SELECT ’X’ FROM employees WHERE manager_id = outer.employee_id);>
OUTPUT:

EKSEMPEL på brug af NOT EXIST-operatoren
Find alle afdelinger, der ikke har nogen ansatte.
Forespørgsel:
SELECT department_id, department_name FROM departments d WHERE NOT EXISTS (SELECT ’X’ FROM employees WHERE department_id = d.department_id);>
OUTPUT:

Ofte stillede spørgsmål om SQL-korrelerede underforespørgsler – ofte stillede spørgsmål
Hvad er forskellen mellem korrelerede underforespørgsler og almindelige underforespørgsler?
Almindelige underforespørgsler (ikke-korrelerede) er uafhængige af den ydre forespørgsel og evalueres kun én gang, før hovedforespørgslen kører. I modsætning hertil er korrelerede underforespørgsler afhængige af den ydre forespørgsel og udføres for hver række i hovedforespørgslen.
Hvornår skal jeg bruge korrelerede underforespørgsler?
Korrelerede underforespørgsler er nyttige, når du skal filtrere resultatet af den ydre forespørgsel baseret på en betingelse, der kræver referenceværdier fra selve den ydre forespørgsel. De bruges almindeligvis i scenarier, hvor tilstanden er afhængig af data fra relaterede tabeller.