Skip to content

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

Посмотрим на запрос из предыдущего раздела, где использовалось сравнение рейтинга:

sql
select d.*
from dishes d
where (d.rating = 320 and d.price > 30)
or d.rating < 270
select d.*
from dishes d
where (d.rating = 320 and d.price > 30)
or d.rating < 270
NAMEPRICERATING
Борщ10130
Свиная отбивная30.5320

Строка, содержащая NULL в колонке rating, не была возвращена ни одним из них.

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

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

sql
select d.*
from dishes d
where d.rating = NULL
select d.*
from dishes d
where d.rating = NULL
no data found
no data found

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

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

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

no data found
no data found

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

Для этого используются операторы IS NULL и IS NOT NULL.

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

Примеры:

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

sql
select d.*
from dishes d
where d.rating IS NULL
select d.*
from dishes d
where d.rating IS NULL
NAMEPRICERATING
Овощной салат5.7-

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

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

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

NAMEPRICERATING
Макароны с сыром20.56320
Борщ10130
Чай с лимоном1.34270
Чай с молоком1.2280
Свиная отбивная30.5320

TIP

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