Sobes.tech
Back to questions
Intern
1

Какое отличие подзапроса в WHERE id IN (SELECT ...) от подзапроса с WHERE EXISTS (SELECT ...)? IN сравнивает значения с набором результатов, EXISTS проверяет наличие хотя бы одной строки IN выполняется для каждой строки внешнего запроса, EXISTS один раз Разницы нет IN работает только с числами, EXISTS с любыми типами

Companies where asked
AvitoAvito

Answer from AI

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

Оба запроса выбирают заказы активных клиентов, но работают по-разному.