Проверка значения на NULL

Если обратить внимание на результаты запросов, выше, то можно заметить, что строка, содержащая NULL в колонке rating не была возвращена ни одним из них.

Как уже говорилось ранее, NULL - это отсутствие значения. Соответственно, он и не может быть больше, меньше, либо даже равняться какому-либо значению, даже себе.

Например, следующий запрос не вернет ни одной строки, хотя мы вроде как и указываем в запросе необходимый критерий - равенство NULL:

select d.*
from dishes d
where d.rating = NULL

Теперь попробуем получить все блюда, у которых рейтинг укзан, т.е. те строки из таблицы, где значение rating не равно NULL:

select d.*
from dishes d
where d.rating <> NULL

Получим аналогичный результат - ни одной строки не будет получено:

Встает вопрос - как определить, что колонка содержит NULL?

Для этого используются операторы IS NULL и IS NOT NULL. IS NULL проверяет, является ли значение равным NULL, в то время как IS NOT NULL проверяет, является ли значение любым, но не NULL.

Работу данных операторов лучше рассмотреть на примерах.

Получим блюда, которые еще не получили никакой оценки, т.е. те блюда, которые в колонке rating содержат NULL:

select d.*
from dishes d
where d.rating IS NULL

А теперь получим все блюда, которые уже получили оценку:

select d.*
from dishes d
where d.rating IS NOT NULL

Как видно, IS NOT NULL возвращает все строки, кроме тех, которые содержат NULL:

В Oracle пустая строка эквивалентна NULL.