Нужно выбрать пользователей без электронной почты. Какое условие в WHERE корректно найдёт строки, где email отсутствует?
A
WHERE email = NULLB
WHERE email <> NULLC
WHERE email IS NULLD
WHERE COALESCE(email, '') = ''Правильный ответ. С
NULL нельзя сравнивать через = или <> — для проверки пропусков используется IS NULL или IS NOT NULL.Разбор
В SQL сравнения вида email = NULL или email <> NULL возвращают не TRUE или FALSE, а UNKNOWN, потому что NULL означает «неизвестно». В WHERE проходят только строки с истинным условием, поэтому такие сравнения не отберут пропуски. Для проверки пропуска используется email IS NULL. Вариант с COALESCE(email, '') = '' смешивает NULL и пустую строку и может дать неверный смысл, если пустая строка встречается как отдельное допустимое значение.
Проверь себя · 1/3разбор после ответа
В таблице
users столбец is_test может быть 0, 1 или NULL. Нужно исключить тестовых пользователей (is_test = 1), но оставить остальных, включая NULL. Какой фильтр корректен?Ещё вопросы по теме «Выражения и NULL»
- В таблице `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')`?
- Дано выражение: `CASE WHEN status = 'paid' THEN amount ELSE 0 END`. Что вернётся, если `status` равно `NULL`, а `amount` равно 500?
- Все вопросы по «Выражения и NULL» →