В таблице orders поле promo_code может быть NULL. Что произойдёт со строкой, где promo_code = NULL, при фильтре WHERE promo_code <> 'NONE'?
AСтрока попадёт в результат, потому что
NULL считается «не равным» строке 'NONE'BСтрока не попадёт в результат, потому что выражение
promo_code <> 'NONE' даёт UNKNOWNCСтрока попадёт в результат только если в запросе указан
ORDER BY promo_codeDЗапрос упадёт с ошибкой, потому что оператор
<> нельзя применять к NULLПравильный ответ. Сравнение с
NULL даёт UNKNOWN, а в WHERE остаются только строки со значением TRUE.Разбор
В трёхзначной логике сравнение NULL <> 'NONE' возвращает не TRUE и не FALSE, а UNKNOWN. Условие WHERE пропускает только TRUE, поэтому строки с NULL отбрасываются. Чтобы такие строки явно включить, добавляют OR promo_code IS NULL или используют COALESCE(promo_code, '...') в зависимости от смысла фильтра.
Проверь себя · 1/3разбор после ответа
В выражении
CASE ветки проверяются сверху вниз. Что вернёт CASE WHEN amount IS NULL THEN 'missing' WHEN amount = 0 THEN 'zero' ELSE 'positive' END для строки, где amount равен NULL?Ещё вопросы по теме «Выражения и NULL»
- Нужно выбрать пользователей без электронной почты. Какое условие в `WHERE` корректно найдёт строки, где `email` отсутствует?
- В таблице `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')`?
- Дано выражение: `CASE WHEN status = 'paid' THEN amount ELSE 0 END`. Что вернётся, если `status` равно `NULL`, а `amount` равно 500?
- Все вопросы по «Выражения и NULL» →