Проверка значения на NULL
Посмотрим на запрос из предыдущего раздела, где использовалось сравнение рейтинга:
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
NAME | PRICE | RATING |
---|---|---|
Борщ | 10 | 130 |
Свиная отбивная | 30.5 | 320 |
Строка, содержащая NULL
в колонке rating
, не была возвращена ни одним из них.
Как уже говорилось ранее, NULL
- это отсутствие значения. Соответственно, он и не может быть больше, меньше, либо даже равняться какому-либо значению, даже себе.
Например, следующий запрос не вернет ни одной строки, хотя мы и указываем в запросе необходимый критерий - равенство NULL
:
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
:
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
:
select d.*
from dishes d
where d.rating IS NULL
select d.*
from dishes d
where d.rating IS NULL
NAME | PRICE | RATING |
---|---|---|
Овощной салат | 5.7 | - |
А теперь получим все блюда, которые уже получили оценку:
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
:
NAME | PRICE | RATING |
---|---|---|
Макароны с сыром | 20.56 | 320 |
Борщ | 10 | 130 |
Чай с лимоном | 1.34 | 270 |
Чай с молоком | 1.2 | 280 |
Свиная отбивная | 30.5 | 320 |
TIP
В Oracle пустая строка эквивалентна NULL
.