Intern
Каква е разликата между подзаявка в WHERE id IN (SELECT ...) и подзаявка с WHERE EXISTS (SELECT ...)? IN сравнява стойностите с набор от резултати, EXISTS проверява дали има поне един ред IN се изпълнява за всеки ред на външния заявка, EXISTS веднъж Няма разлика IN работи само с числа, EXISTS с всякакви типове
sobes.tech AI
Отговор от AI
Правилен отговор: IN сравнява стойностите с набор от резултати, EXISTS проверява дали съществува поне един ред.
Подзаявката с IN връща редове, където стойността съвпада с някоя от стойностите, върнати от подзаявката. Подзаявката с EXISTS проверява дали съществува поне един ред, който отговаря на условието.
Разлики:
- IN сравнява конкретни стойности, EXISTS проверява наличието на редове.
- EXISTS често е по-ефективен при проверка за съществуване, особено при сложни условия.
Пример:
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');
И двете заявки избират поръчки на активни клиенти, но работят по различен начин.