logo

SQL-korrelerte underspørringer

I SQL er en korrelert underspørring en underspørring som refererer til en kolonne fra den ytre spørringen. Underspørringen utføres gjentatte ganger for hver rad i den ytre spørringen, ved å bruke verdiene fra gjeldende rad for å utføre underspørringen. Resultatet av underspørringen brukes deretter i evalueringen av den ytre spørringen.

Korrelerte underspørringer brukes for rad-for-rad-behandling. Hver underspørring utføres én gang for hver rad i den ytre spørringen.



En korrelert underspørring blir evaluert én gang for hver rad som behandles av den overordnede setningen. Overordnet uttalelse kan være en PLUKKE UT , OPPDATER , eller SLETT uttalelse.

Syntaks:

VELG kolonne1, kolonne2, ….

FRA bord1 ytre



WHERE kolonne1 operator

(VELG kolonne1, kolonne2

FRA tabell 2



WHERE uttr1 =

ytre.uttr2);

En korrelert underspørring er én måte å lese hver rad i en tabell og sammenligne verdier i hver rad med relaterte data. Den brukes når en underspørring må returnere et annet resultat eller sett med resultater for hver kandidatrad som vurderes av hovedspørringen. Med andre ord kan du bruke en korrelert underspørring til å svare på et flerdelt spørsmål hvis svar avhenger av verdien i hver rad som behandles av den overordnede setningen.

Nestede underspørringer versus korrelerte underspørringer

Med en normal nestet underspørring, den indre PLUKKE UT spørringen kjøres først og kjøres én gang, og returnerer verdier som skal brukes av hovedspørringen. En korrelert underspørring kjøres imidlertid én gang for hver kandidatrad som vurderes av den ytre spørringen. Med andre ord er den indre spørringen drevet av den ytre spørringen.

MERK: Du kan også bruke NOEN og ALLE operatør i en korrelert underspørring. EKSEMPEL på korrelerte underspørringer: Finn alle de ansatte som tjener mer enn gjennomsnittslønnen i sin avdeling.

Spørsmål:

SELECT last_name, salary, department_id  FROM employees outer  WHERE salary>(VELG AVG(lønn) FRA ansatte HVOR avdeling_id = ytre.avdeling_id gruppe etter avdelings_id);>

Annen bruk av korrelasjon er i OPPDATER og SLETT

KORLERERT OPPDATERING

UPDATE table1 alias1  SET column = (SELECT expression   FROM table2 alias2  WHERE alias1.column =  alias2.column);>

Bruk en korrelert underspørring for å oppdatere rader i én tabell basert på rader fra en annen tabell.

KORLERERT SLETT

DELETE FROM table1 alias1  WHERE column1 operator  (SELECT expression  FROM table2 alias2  WHERE alias1.column = alias2.column);>

Bruk en korrelert underspørring for å slette rader i én tabell basert på radene fra en annen tabell.

java initialiseringsarray

Bruk av EXISTS-operatøren

EXISTS-operatoren tester for eksistensen av rader i resultatsettet til underspørringen. Hvis en underspørringsradverdi blir funnet, blir betingelsen flagget EKTE og søket fortsetter ikke i den indre spørringen, og hvis den ikke blir funnet, blir betingelsen flagget FALSK og søket fortsetter i den indre spørringen.
EKSEMPEL på bruk av EXIST-operatoren:
Finn ansatte som har minst én person som rapporterer til seg.

Spørsmål:

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å bruk av NOT EXIST-operatoren
Finn alle avdelinger som ikke har noen ansatte.

Spørsmål:

SELECT department_id, department_name FROM departments d WHERE NOT EXISTS (SELECT ’X’ FROM employees WHERE department_id = d.department_id);>

OUTPUT:

Vanlige spørsmål om SQL-korrelerte underspørringer – vanlige spørsmål

Hva er forskjellen mellom korrelerte underspørringer og vanlige underspørringer?

Vanlige underspørringer (ikke-korrelerte) er uavhengige av den ytre spørringen og evalueres bare én gang før hovedspørringen kjøres. Derimot er korrelerte underspørringer avhengige av den ytre spørringen og utføres for hver rad i hovedspørringen.

Når bør jeg bruke korrelerte underspørringer?

Korrelerte underspørringer er nyttige når du trenger å filtrere resultatet av den ytre spørringen basert på en tilstand som krever referanseverdier fra selve den ytre spørringen. De brukes ofte i scenarier der tilstanden er avhengig av data fra relaterte tabeller.