Проверка значения на NULL
Посмотрим на запрос из предыдущего раздела, где использовалось сравнение рейтинга:
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 = NULLno data foundТеперь попробуем получить все блюда, у которых рейтинг указан, т.е. те строки из таблицы, где значение rating не равно NULL:
select d.*
from dishes d
where d.rating <> NULLПолучим аналогичный результат - ни одной строки не будет получено:
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| NAME | PRICE | RATING |
|---|---|---|
| Овощной салат | 5.7 | - |
А теперь получим все блюда, которые уже получили оценку:
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.