Mediumexists
Чем EXISTS от IN отличается?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
EXISTS проверяет, что подзапрос вернул хотя бы одну строку (останавливается на первом совпадении). IN проверяет вхождение значения в список/подзапрос.
-- EXISTS: коррелированный, ссылается на внешний запрос
SELECT * FROM users u
WHERE EXISTS (
SELECT 1 FROM orders WHERE user_id = u.id
);
-- IN: подзапрос вычисляется один раз
SELECT * FROM users
WHERE id IN (SELECT user_id FROM orders);Осторожно с NOT IN и NULL: NOT IN (1, 2, NULL) всегда даёт UNKNOWN и ничего не вернёт. Используйте NOT EXISTS или добавьте AND col IS NOT NULL. Современный оптимизатор (PostgreSQL, MySQL 8+) часто сам преобразует IN ↔ EXISTS, разницы в производительности почти нет.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.