Назад к вопросам
Avito
Intern
2
Какое отличие подзапроса в WHERE id IN (SELECT ...) от подзапроса с WHERE EXISTS (SELECT ...)? IN сравнивает значения с набором результатов, EXISTS проверяет наличие хотя бы одной строки IN выполняется для каждой строки внешнего запроса, EXISTS один раз Разницы нет IN работает только с числами, EXISTS с любыми типами
Компании, где спрашивали
Ответ от нейросети
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');
Оба запроса выбирают заказы активных клиентов, но работают по-разному.