Sobes.tech
Intern

Kokia yra skirtumas tarp WHERE id IN (SELECT ...) ir WHERE EXISTS (SELECT ...)? IN lygina reikšmes su rezultatų rinkiniu, EXISTS tikrina, ar yra bent viena eilutė IN vykdomas kiekvienai išorinei užklausos eilutei, EXISTS vieną kartą Nėra skirtumo IN veikia tik su skaičiais, EXISTS su bet kokio tipo duomenimis

sobes.tech AI

Atsakymas iš AI

Teisingas atsakymas: IN lygina reikšmes su rezultatų rinkiniu, EXISTS tikrina, ar egzistuoja bent viena eilutė.

Subklausimas su IN grąžina eilutes, kuriose reikšmė atitinka bet kurią iš subklausimo grąžintų reikšmių. Subklausimas su EXISTS tikrina, ar egzistuoja bent viena eilutė, kuri atitinka sąlygą.

Skirtumai:

  • IN lygina konkrečias reikšmes, EXISTS tikrina eilučių egzistavimą.
  • EXISTS dažnai yra efektyvesnis egzistavimo patikrinimui, ypač sudėtingomis sąlygomis.

Pavyzdys:

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');

Abu užklausimai pasirinks aktyvių klientų užsakymus, tačiau veikia skirtingai.