Шаг 16 - Еще раз и подробно про NULL

Вернемся еще раз к значениям, типа NULLшаге 13 мы с ним уже сталкивались) и разберемся с ними немного подробнее. Трехзначная логика в таблицах БД, как известно до сих пор вызывает, не мало споров, но тем не менее она принята на вооружение, и никто от нее пока не отказывался! Действительно, ведь по своей сути БД, является, моделью реального мира и, например, если в нашей таблице менеджеров компании, одному из них еще по какой либо причине не определена квота продаж, что необходимо внести в поле таблицы, ну уж, наверное, никак не "0" или еще какое-либо вещественное значение. Вещественное значит определенное, но мы то с вами еще не определились! Так вот, для значений неопределенности, как раз и подходит NULL! Еще раз хочу обратить внимание, вокруг реальный мир и не нужно терять чувство реальности! :) Надеюсь, теперь все стало ясно? В дальнейшем, мы еще не однократно, будем возвращаться к значениям типа NULL и надеюсь, что вы поймете его суть и не будете допускать, досадных, ошибок при его использовании! Итак, давайте рассмотрим какие правила для оператора SELECT, применяются при работе со значением NULL. Возьмем конкретный пример:

Найти служащего, который еще не закреплен за офисом:

SQL> SELECT NAME FROM SALESREPS
  2  WHERE REP_OFFICE = NULL
  3  /

строки не выбраны

Хммм ... странно, правда? Условие я записал, все вроде бы верно. Но это только на первый взгляд. Когда SQL, встречает строку:

REP_OFFICE = NULL

Он выполняет следующую проверку значения:

NULL = NULL

Такой тип проверки вернет, как вы думаете, что? Конечно же, снова NULL!!! :))) А для оператора проверки значения все, что не является TRUE, в результирующий набор не входит!!! Хотя на самом деле строки с таким условием существуют!!! Как же быть в этом случае? Да, просто применить верный оператор для проверки на значение NULL! Вот и все! А выглядит он так:

------------ имя столбца  IS ---------- NULL ------------------------------
                                NOT

Применяем: Найти служащего, который еще не закреплен за офисом.

SQL> SELECT NAME FROM SALESREPS
  2  WHERE REP_OFFICE IS NULL
  3  /

NAME                                                                                 
------------------------------                                                       
Крис Кельми                                                                          

Вот теперь все верно! И не нужно забывать, делать это именно так! Ну, естественно можно применять условие NOT: Вывести всех кто закреплен за офисами.

SQL> SELECT NAME FROM SALESREPS
  2  WHERE REP_OFFICE IS NOT NULL
  3  /

NAME                                                                                 
------------------------------                                                       
Вася Пупкин                                                                          
Маша Распутина                                                                       
Филип Киркоров                                                                       
Света Разина                                                                         
Наташа Королева                                                                      
Игорь Николаев                                                                       
Игорь Петров                                                                         
Дима Маликов                                                                         
Маша Сидорова                                                                        
Максим Галкин                                                                        

10 строк выбрано.

Вот теперь есть все кроме Криса Кельми, что ж не повезло парню, бывает! Вот так работают с NULL, значениями!

Надеюсь, теперь все встало на свои места, но это еще далеко не все, что касается NULL, мы с ним еще не раз встретимся! Что собственно говоря неизбежно! В следующий раз мы займемся составными условиями поиска!


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Летучий Сергей - 20.08.03