Sobes.tech
Intern

Kāda ir atšķirība starp WHERE id IN (SELECT ...) un WHERE EXISTS (SELECT ...)? IN salīdzina vērtības ar rezultātu kopu, EXISTS pārbauda, vai ir vismaz viena rinda IN tiek izpildīts katrai ārējās vaicājuma rindai, EXISTS vienu reizi Nav atšķirības IN darbojas tikai ar skaitļiem, EXISTS ar jebkura veida datiem

sobes.tech AI

Atbilde no AI

Pareizā atbilde: IN salīdzina vērtības ar rezultātu kopu, EXISTS pārbauda, vai pastāv vismaz viena rinda.

Subvaicājums ar IN atgriež rindas, kurās vērtība atbilst jebkurai no subvaicājuma atgrieztajām vērtībām. Subvaicājums ar EXISTS pārbauda, vai pastāv vismaz viena rinda, kas atbilst nosacījumam.

Atšķirības:

  • IN salīdzina konkrētas vērtības, EXISTS pārbauda rindu esamību.
  • EXISTS bieži ir efektīvāks esamības pārbaudē, īpaši sarežģītos nosacījumos.

Piemērs:

SELECT * FROM orders o
WHERE o.customer_id IN (SELECT c.id FROM customers c WHERE c.status = 'active');

SELECT * FROM orders o
WHERE EXISTS (SELECT 1 FROM customers c WHERE c.id = o.customer_id AND c.status = 'active');

Abi vaicājumi izvēlas aktīvu klientu pasūtījumus, bet darbojas dažādi.