logo

SQL-korrelerede underforespørgsler

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.