Выбор ответа Middle SQL для аналитика обновлено
NOT IN и NULL
Вопрос
Подзапрос SELECT client_id FROM orders вернул значения 1, 2 и NULL. Что вернёт SELECT * FROM clients WHERE id NOT IN (подзапрос)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ни одной строки. x NOT IN (1, 2, NULL) раскрывается в x < 1 AND x < 2 AND x < NULL.
Варианты ответа
- Всех клиентов
- Ошибку выполнения
- Ни одной строкиправильный ответ
- Всех клиентов, кроме 1 и 2
Разбор
x NOT IN (1, 2, NULL) раскрывается в x <> 1 AND x <> 2 AND x <> NULL. Последнее сравнение даёт NULL, и всё условие не бывает true. Поэтому для анти-джойна используют NOT EXISTS или LEFT JOIN ... IS NULL. Ошибки не будет, запрос просто вернёт пустоту.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.