logo

Su SQL susijusios papildomos užklausos

SQL koreliuota antrinė užklausa yra antrinė užklausa, kuri nurodo išorinės užklausos stulpelį. Antrinė užklausa vykdoma pakartotinai kiekvienai išorinės užklausos eilutei, naudojant dabartinės eilutės reikšmes antrinei užklausai atlikti. Tada antrinės užklausos rezultatas naudojamas išorinės užklausos vertinimui.

Koreliuotos antrinės užklausos naudojamos eilučių apdorojimui. Kiekviena antrinė užklausa vykdoma vieną kartą kiekvienai išorinės užklausos eilutei.



Koreliuota antrinė užklausa įvertinama vieną kartą kiekvienai pirminio sakinio apdorojamai eilutei. Pirminis teiginys gali būti a PASIRINKTI , ATNAUJINTI , arba IŠTRINTI pareiškimas.

Sintaksė:

PASIRINKTI 1 stulpelį, 2 stulpelį, ….

IŠ lentelės1 išorinė



WHERE 1 stulpelio operatorius

(PASIRINKITE 1 stulpelį, 2 stulpelį

IŠ lentelės2



KUR išraišk1 =

išorinis.ekspr2);

Koreliuota antrinė užklausa yra vienas iš būdų skaityti kiekvieną lentelės eilutę ir lyginti kiekvienos eilutės reikšmes su susijusiais duomenimis. Jis naudojamas kiekvieną kartą, kai antrinė užklausa turi pateikti skirtingą rezultatą arba rezultatų rinkinį kiekvienoje pagrindinėje užklausoje nagrinėjamoje kandidatų eilutėje. Kitaip tariant, galite naudoti koreliuojamą antrinę užklausą, kad atsakytumėte į kelių dalių klausimą, kurio atsakymas priklauso nuo reikšmės kiekvienoje eilutėje, kurią apdoroja pirminis teiginys.

Įdėtos papildomos užklausos ir susijusios papildomos užklausos

Naudojant įprastą įdėtą antrinę užklausą, vidinė PASIRINKTI užklausa paleidžiama pirmiausia ir įvykdoma vieną kartą, grąžinant reikšmes, kurios turi būti naudojamos pagrindinėje užklausoje. Tačiau koreliuota antrinė užklausa vykdoma vieną kartą kiekvienai išorinėje užklausoje nagrinėjamai kandidatų eilutei. Kitaip tariant, vidinę užklausą skatina išorinė užklausa.

PASTABA: Taip pat galite naudoti BET KOKIO ir VISI koreliuojamoje antrinėje užklausoje. Susijusių antrinių užklausų PAVYZDYS: Raskite visus darbuotojus, kurie savo skyriuje uždirba daugiau nei vidutinis atlyginimas.

Užklausa:

SELECT last_name, salary, department_id  FROM employees outer  WHERE salary>(SELECT AVG (alga) FROM darbuotojai WHERE departamento_id = išorinis.departamento_id grupė pagal skyriaus_id);>> 

Yra ir kitas koreliacijos naudojimas ATNAUJINTI ir IŠTRINTI

KORELIUOTAS ATNAUJINIMAS

Norėdami atnaujinti vienos lentelės eilutes pagal kitos lentelės eilutes, naudokite koreliuojamą antrinę užklausą.

KORELIUOTAS IŠTRINTI

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

Norėdami ištrinti vienos lentelės eilutes pagal kitos lentelės eilutes, naudokite koreliuojamą antrinę užklausą.

pabandykite gaudyti bloką java

Naudojant EXISTS operatorių

Operatorius EXISTS tikrina, ar antrinės užklausos rezultatų rinkinyje yra eilučių. Jei randama antrinės užklausos eilutės reikšmė, sąlyga pažymima TIESA ir paieška vidinėje užklausoje nepratęsiama, o jei ji nerandama, sąlyga pažymima NETEISINGA ir paieška tęsiama vidinėje užklausoje.
PAVYZDYS, kaip naudoti operatorių EXIST:
Raskite darbuotojus, kuriems atsiskaito bent vienas asmuo.

Užklausa:

SELECT employee_id, last_name, job_id, department_id FROM employees outer WHERE EXISTS ( SELECT ’X’ FROM employees WHERE manager_id = outer.employee_id);>

IŠVADA:

PAVYZDYS, kai naudojamas operatorius NOT EXIST
Raskite visus skyrius, kuriuose nėra darbuotojų.

Užklausa:

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

IŠVADA:

Dažnai užduodami klausimai apie susijusias SQL papildomas užklausas – DUK

Kuo skiriasi koreliuojamos antrinės užklausos nuo įprastų antrinių užklausų?

Įprastos antrinės užklausos (nesusijusios) nepriklauso nuo išorinės užklausos ir įvertinamos tik vieną kartą prieš paleidžiant pagrindinę užklausą. Priešingai, koreliuojamos antrinės užklausos priklauso nuo išorinės užklausos ir vykdomos kiekvienai pagrindinės užklausos eilutei.

Kada turėčiau naudoti susijusias antrines užklausas?

Susijusios antrinės užklausos yra naudingos, kai reikia filtruoti išorinės užklausos rezultatą pagal tam tikrą sąlygą, kuri reikalauja nuorodos į pačios išorinės užklausos vertes. Jie dažniausiai naudojami scenarijuose, kai sąlyga remiasi duomenimis iš susijusių lentelių.