Какое отличие подзапроса в WHERE id IN (SELECT ...) от подзапроса с WHERE EXISTS (SELECT ...)?

Правильный ответ: IN сравнивает значения с набором результатов, EXISTS проверяет наличие хотя бы одной строки.

Короткий ответ

Что ответить на собеседовании

Правильный ответ: IN сравнивает значения с набором результатов, EXISTS проверяет наличие хотя бы одной строки.

Подробный разбор

Ответ с пояснениями

Условие

Какое отличие подзапроса в WHERE id IN (SELECT ...) от подзапроса с WHERE EXISTS (SELECT ...)?

IN сравнивает значения с набором результатов, EXISTS проверяет наличие хотя бы одной строки

IN выполняется для каждой строки внешнего запроса, EXISTS один раз

Разницы нет

IN работает только с числами, EXISTS с любыми типами

Ответ

Правильный ответ: 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');

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

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее