Как поведёт себя фильтр WHERE country IN ('RU', 'KZ') для строки, где country IS NULL?
AСтрока попадёт в результат, потому что
NULL сравнивается со списком как обычное значениеBСтрока попадёт в результат, если в списке
IN есть хотя бы два разных значения для проверкиCSQL выдаст ошибку выполнения из-за
NULL в проверяемом столбце и прервёт запрос целикомDСтрока не попадёт в результат, потому что выражение даёт
UNKNOWN, а не TRUEПравильный ответ. При
country IS NULL выражение country IN (...) даёт UNKNOWN, поэтому строка не проходит WHERE.Разбор
IN — это набор сравнений на равенство. Если country равно NULL, то сравнение с каждым элементом ('RU', 'KZ') даёт UNKNOWN. В итоге всё выражение не становится TRUE, и строка не проходит фильтр WHERE. Если нужно включать NULL, добавляют OR country IS NULL.
Проверь себя · 1/3разбор после ответа
Нужно выбрать пользователей без электронной почты. Какое условие в
WHERE корректно найдёт строки, где email отсутствует?Ещё вопросы по теме «Выражения и NULL»
- Нужно выбрать пользователей без электронной почты. Какое условие в `WHERE` корректно найдёт строки, где `email` отсутствует?
- В таблице `orders` поле `promo_code` может быть `NULL`. Что произойдёт со строкой, где `promo_code = NULL`, при фильтре `WHERE promo_code <> 'NONE'`?
- В таблице `sessions` 5 строк. Значения `utm_source`: `'google'`, `NULL`, `'email'`, `NULL`, `NULL`. Чему равны `COUNT(*)` и `COUNT(utm_source)`?
- В таблице `payments` три строки со значениями `amount`: `NULL`, `NULL`, `NULL`. Что вернут запросы `SELECT SUM(amount)` и `SELECT SUM(COALESCE(amount, 0))`?
- Что вернёт выражение `COALESCE(NULL, NULL, 'web', 'app')`?
- Все вопросы по «Выражения и NULL» →