Sobes.tech
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');

И двете заявки избират поръчки на активни клиенти, но работят по различен начин.