В таблице users столбец is_test может быть 0, 1 или NULL. Нужно исключить тестовых пользователей (is_test = 1), но оставить остальных, включая NULL. Какой фильтр корректен?
A
WHERE is_test <> 1: одиночное неравенство без отдельной обработки NULL-значений поляB
WHERE is_test = 0: явный отбор строк с нулевым значением столбца is_testC
WHERE is_test <> 1 OR is_test IS NULL: неравенство и явная проверка через IS NULLD
WHERE is_test != NULL: сравнение через оператор неравенства напрямую с NULLПравильный ответ. Условие
<> исключает строки с NULL, если не добавить явную проверку IS NULL.Разбор
WHERE is_test <> 1 не пропустит строки с is_test = NULL, потому что сравнение даст UNKNOWN. Если по смыслу NULL означает «неизвестно/не отмечен» и таких пользователей нужно оставить, добавляют OR is_test IS NULL. Вариант WHERE is_test = 0 тоже исключит NULL, что меняет смысл выборки. А is_test != NULL всегда даёт UNKNOWN и не возвращает ничего.
Проверь себя · 1/3разбор после ответа
Есть логика сегментации:
CASE WHEN age IS NULL THEN 'unknown' WHEN age < 18 THEN 'minor' ELSE 'adult' END. Что вернётся для строки, где значение age равно NULL?Ещё вопросы по теме «Выражения и 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» →