Intern
Jaký je rozdíl mezi poddotazem v WHERE id IN (SELECT ...) a poddotazem s WHERE EXISTS (SELECT ...)? IN porovnává hodnoty s množinou výsledků, EXISTS kontroluje, zda je alespoň jeden řádek IN se provádí pro každý řádek vnějšího dotazu, EXISTS jednou Rozdíl není IN funguje pouze s čísly, EXISTS s jakýmkoli typem
sobes.tech AI
Odpověď od AI
Správná odpověď: IN porovnává hodnoty s množinou výsledků, EXISTS kontroluje, zda existuje alespoň jeden řádek.
Poddotaz s IN vrací řádky, kde hodnota odpovídá kterékoliv hodnotě vrácené poddotazem. Poddotaz s EXISTS kontroluje, zda existuje alespoň jeden řádek splňující podmínku.
Rozdíly:
- IN porovnává konkrétní hodnoty, EXISTS kontroluje existenci řádků.
- EXISTS je často efektivnější při kontrole existence, zejména u složitých podmínek.
Pří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');
Obě dotazy vybírají objednávky aktivních zákazníků, ale fungují odlišně.