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.