Sobes.tech
Intern

Aký je rozdiel medzi poddotazom v WHERE id IN (SELECT ...) a poddotazom s WHERE EXISTS (SELECT ...)? IN porovnáva hodnoty s množinou výsledkov, EXISTS kontroluje, či existuje aspoň jeden riadok IN sa vykonáva pre každý riadok vonkajšieho dotazu, EXISTS raz Žiadny rozdiel IN funguje iba s číslami, EXISTS s akýmkoľvek typom

sobes.tech AI

Odpoveď od AI

Správna odpoveď: IN porovnáva hodnoty s množinou výsledkov, EXISTS kontroluje, či existuje aspoň jeden riadok.

Poddotaz s IN vracia riadky, kde hodnota zodpovedá ktorejkoľvek hodnote vrátenej poddotazom. Poddotaz s EXISTS kontroluje, či existuje aspoň jeden riadok, ktorý spĺňa podmienku.

Rozdiely:

  • IN porovnáva konkrétne hodnoty, EXISTS kontroluje existenciu riadkov.
  • EXISTS je často efektívnejší pri kontrole existencie, najmä pri zložitých podmienkach.

Príklad:

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

Obidva dotazy vyberajú objednávky aktívnych zákazníkov, ale fungujú odlišne.