Выбор ответа Middle SELECT и фильтрация спрашивают часто обновлено
NOT IN со списком, где есть NULL
Вопрос
В таблице t колонка id содержит значения 1, 2, 3, 4, 5. Что вернёт запрос?
SELECT id FROM t WHERE id NOT IN (1, 2, NULL);
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ни одной строки. id NOT IN (1, 2, NULL) раскрывается в id < 1 AND id < 2 AND id < NULL.
Варианты ответа
- Строки 3, 4, 5
- Строки 3, 4, 5 и ошибку-предупреждение
- Ни одной строкиправильный ответ
- Все пять строк
Разбор
id NOT IN (1, 2, NULL) раскрывается в id <> 1 AND id <> 2 AND id <> NULL. Последнее сравнение всегда NULL, и всё выражение в лучшем случае NULL, но никогда не true. Значит, WHERE отбросит все строки. Ожидание «3, 4, 5» и есть типичная ловушка; никаких предупреждений PostgreSQL не выдаёт.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Логический порядок выполнения SELECT
Следующий вопрос
Где окажутся NULL при сортировке