Проверка значения на 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
.