Выбор ответа 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. Ошибку выполнения
  3. Ни одной строкиправильный ответ
  4. Всех клиентов, кроме 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 ошибок.