logo

SQL saistītie apakšvaicājumi

SQL valodā korelētais apakšvaicājums ir apakšvaicājums, kas attiecas uz kolonnu no ārējā vaicājuma. Apakšvaicājums tiek izpildīts atkārtoti katrai ārējā vaicājuma rindai, izmantojot pašreizējās rindas vērtības, lai veiktu apakšvaicājumu. Apakšvaicājuma rezultāts tiek izmantots ārējā vaicājuma novērtēšanā.

Korelētie apakšvaicājumi tiek izmantoti apstrādei pa rindiņām. Katrs apakšvaicājums tiek izpildīts vienu reizi katrai ārējā vaicājuma rindai.



Korelētais apakšvaicājums tiek novērtēts vienu reizi katrai rindai, ko apstrādā vecākais priekšraksts. Vecāku paziņojums var būt a ATLASĪT , ATJAUNINĀT , vai DZĒST paziņojums, apgalvojums.

Sintakse:

ATLASĪT kolonnu 1, kolonnu 2, ….

NO tabulas1 ārējā



WHERE kolonnas1 operators

(ATLASĪT kolonnu 1, kolonnu 2

NO tabulas2



KUR expr1 =

ārējais.ekspr2);

Korelēts apakšvaicājums ir viens no veidiem, kā nolasīt katru tabulas rindu un salīdzināt katras rindas vērtības ar saistītajiem datiem. To izmanto ikreiz, kad apakšvaicājumā ir jāatgriež cits rezultāts vai rezultātu kopa katrai kandidātrindai, ko aplūko galvenais vaicājums. Citiem vārdiem sakot, varat izmantot korelētu apakšvaicājumu, lai atbildētu uz vairākdaļīgu jautājumu, kura atbilde ir atkarīga no vērtības katrā vecāka priekšraksta apstrādātajā rindā.

Ligzdotie apakšvaicājumi un saistītie apakšvaicājumi

Izmantojot parastu ligzdotu apakšvaicājumu, iekšējais ATLASĪT vaicājums tiek izpildīts pirmais un tiek izpildīts vienreiz, atgriežot vērtības, kas jāizmanto galvenajam vaicājumam. Tomēr korelētais apakšvaicājums tiek izpildīts vienu reizi katrai kandidātrindai, ko ņem vērā ārējais vaicājums. Citiem vārdiem sakot, iekšējo vaicājumu virza ārējais vaicājums.

PIEZĪME: Varat arī izmantot JEBKURA un VISI operatoru korelētā apakšvaicājumā. Saistītu apakšvaicājumu PIEMĒRS: Atrodiet visus darbiniekus, kuri nopelna vairāk par vidējo algu savā nodaļā.

Vaicājums:

SELECT last_name, salary, department_id  FROM employees outer  WHERE salary>(SELECT AVG(alga) FROM darbiniekiem WHERE nodaļas_id = ārējais.departamenta_id grupa pēc nodaļas_id);>> 

Ir arī cits korelācijas lietojums ATJAUNINĀT un DZĒST

KORELĀTS ATJAUNINĀJUMS

Izmantojiet korelētu apakšvaicājumu, lai atjauninātu rindas vienā tabulā, pamatojoties uz rindas no citas tabulas.

KORELĒTĀ DZĒŠANA

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

Izmantojiet korelētu apakšvaicājumu, lai dzēstu rindas vienā tabulā, pamatojoties uz rindas no citas tabulas.

formāta java virkne

Operatora EXISTS izmantošana

Operators EXISTS pārbauda rindu esamību apakšvaicājuma rezultātu kopā. Ja tiek atrasta apakšvaicājuma rindas vērtība, nosacījums tiek atzīmēts PATIESA un meklēšana neturpinās iekšējā vaicājumā, un, ja tas netiek atrasts, nosacījums tiek atzīmēts FALSE un meklēšana turpinās iekšējā vaicājumā.
Operatora EXIST izmantošanas PIEMĒRS:
Atrodiet darbiniekus, kuriem ir vismaz viena persona.

Vaicājums:

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

IZEJA:

Operatora NOT EXIST izmantošanas PIEMĒRS
Atrodiet visas nodaļas, kurās nav darbinieku.

Vaicājums:

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

IZEJA:

Bieži uzdotie jautājumi par SQL saistītajiem apakšvaicājumiem — FAQ

Kāda ir atšķirība starp korelētajiem apakšvaicājumiem un parastajiem apakšvaicājumiem?

Regulāri apakšvaicājumi (nav korelēti) ir neatkarīgi no ārējā vaicājuma un tiek novērtēti tikai vienu reizi pirms galvenā vaicājuma izpildes. Turpretim korelētie apakšvaicājumi ir atkarīgi no ārējā vaicājuma un tiek izpildīti katrai galvenā vaicājuma rindai.

Kad man vajadzētu izmantot saistītos apakšvaicājumus?

Korelētie apakšvaicājumi ir noderīgi, ja ir jāfiltrē ārējā vaicājuma rezultāts, pamatojoties uz kādu nosacījumu, kas prasa atsauces uz vērtībām no paša ārējā vaicājuma. Tos parasti izmanto scenārijos, kad nosacījums balstās uz datiem no saistītām tabulām.