Sobes.tech
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ě.