Sql null value java

Специальное значение NULL

В языке SQL, как и в языке Java, есть специальное ключевое слово для обозначения отсутствия значения – это null. Или как это часто пишут – NULL .

Использование NULL в SQL очень похоже на использование null в Java. В Java могут быть объекты, поля которых содержат null-значения. В SQL могут быть таблицы, строки которых содержат NULL-значения.

Давай я специально добавлю в нашу таблицу product пару продуктов без бренда. Если бренд продукта неизвестен, то в качестве значения будет NULL .

Чтобы отобразить такие продукты, отсортируем нашу таблицу product по id в обратном порядке и возьмем 10 записей. Запрос будет выглядеть так:

 SELECT * FROM product ORDER BY id DESC LIMIT 10 

Получим такой результат запроса:

id name brand price count
15 Заклепка NULL 0.01 1000
14 Шуруп NULL 0.10 1000
13 Подставка IKEA 100.00 10
12 Вазон SmartFlower 99.00 9
11 Кресло Bosch 44.00 8
10 Плита Bosch 199.00 10
9 Комод IKEA 99.00 10
8 Лампа LG 15.00 100
7 Телевизор LG 350.00 4
6 Полка Bosch 25.00 114

Да, я добавил в таблицу заклепки и шурупы. У них есть цена и количество, но нет бренда.

5.2 Сравнение с NULL

Помнишь, что тебя иногда бесило в Java при использовании null? Что нельзя сравнивать переменные, которые могут ссылаться на null-значения через equals(). Пример:

 Product product1 = new Product(); Product product2 = null; if (product2.equals(product1) < //тут возникнет исключение … >

Ты не поверишь, но в языке SQL тебя тоже ждут нюансы при работе с NULL-значениями. И звучит этот нюанс примерно так: ничто не равно NULL .

Читайте также:  Kotlin cast string to int

Если попробуешь отфильтровать все продукты, чей бренд равен null :

 SELECT * FROM product WHERE brand = NULL 

То получишь пустую таблицу:

Но если в запросе написать, что brand не равно NULL , получишь тот же результат:

 SELECT * FROM product WHERE brand != NULL 

Ты опять получишь пустую таблицу:

Любое сравнение / действие с NULL будет давать NULL :

Да, даже если сравнивать NULL с NULL, то в ответе будет NULL .

5.3 IS NULL и IS NOT NULL

Так как же нам проверить, что какое-то поле (или какая-то колонка) имеет значение NULL ? А для этого в языке SQL есть специальное выражение – IS NULL . Выглядит это так.

Если ты хочешь проверить не равна ли колонка твоей таблицы NULL , то нужно писать IS NOT NULL :

Давай напишем запрос, который отберет все продукты из таблицы product, чей бренд равен NULL . Выглядеть такой запрос будет так:

 SELECT * FROM product WHERE brand IS NULL 

И получим такой результат запроса:

А теперь давай отобразим все продукты, цена которых меньше 20 долларов:

 SELECT * FROM product WHERE price < 20 

И получим такой результат запроса:

id name brand price count
2 Стул IKEA 5.00 45
8 Лампа LG 15.00 100
14 Шуруп NULL 0.10 1000
15 Заклепка NULL 0.01 1000

Теперь укажем, что цена должна быть меньше 20 долларов и бренд не NULL .

 SELECT * FROM product WHERE price < 20 AND brand IS NOT NULL 

Получим такой результат запроса:

Отлично, две последних строки исчезли. Вот как это работает. Немного непривычно, но все же определенная логика в этом есть.

Источник

Оцените статью