Какой фильтр в WHERE корректно оставит только строки, где столбец channel задан (не равен NULL)?
A
WHERE channel IS NOT NULL: отбираются строки со значением, отличным от NULLB
WHERE channel <> NULL: сравнение с NULL через <> пропускает заполненные строкиC
WHERE COALESCE(channel, 'unknown') = 'unknown': остаются строки с NULL или со значением 'unknown'D
WHERE channel = NULL: сравнение = с NULL пропускает строки с заполненным channelПравильный ответ. Проверка «не равно
NULL» делается через IS NOT NULL, а не через <> или =.Разбор
Сравнения channel <> NULL и channel = NULL не работают как ожидается, потому что результат таких сравнений — UNKNOWN, и строка не проходит фильтр. Правильный способ отобрать строки с заполненным значением — WHERE channel IS NOT NULL. Вариант COALESCE(channel, 'unknown') = 'unknown', наоборот, отбирает строки, где channel равен NULL, а не наоборот. Это базовая ловушка трёхзначной логики в SQL.
Проверь себя · 1/3разбор после ответа
В таблице
orders поле promo_code может быть NULL. Что произойдёт со строкой, где promo_code = NULL, при фильтре WHERE promo_code <> 'NONE'?Ещё вопросы по теме «Выражения и 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» →