Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Логические операции и NULL

4.9K
27 мая 2009 года
efferson
57 / / 08.12.2005
Не давно столкнулся с тем, что нотация языка SQL подразумевает следующее поведение для логических операций с типом NULL:

NULL AND TRUE = NULL
NULL AND FALSE = FALSE
NULL OR TRUE = TRUE
NULL OR FALSE = NULL
NOT NULL = NULL

Чем обусловлено такое странное поведение?
6
27 мая 2009 года
George
4.1K / / 05.01.2007
а в чем странность то?
11
27 мая 2009 года
oxotnik333
2.9K / / 03.08.2007
NULL AND TRUE = NULL => 0 * 1 = 0 (null / false)
NULL AND FALSE = FALSE => 0 * 0 = 0 (false)
NULL OR TRUE = TRUE => 0 + 1 = 0 (true)
NULL OR FALSE = NULL = 0 + 0 = 0 (null / false)
NOT NULL = NULL => хз как NOT мат операцией представить
8.2K
27 мая 2009 года
Ora-cool
211 / / 20.09.2007
Цитата: oxotnik333
NULL AND TRUE = NULL => 0 * 1 = 0 (null / false)
NULL AND FALSE = FALSE => 0 * 0 = 0 (false)
NULL OR TRUE = TRUE => 0 + 1 = 0 (true)
NULL OR FALSE = NULL = 0 + 0 = 0 (null / false)
NOT NULL = NULL => хз как NOT мат операцией представить



Все таки не совсем корректно здесь NULL заменять нулем. NULL - это неопределенное значение (неизвестное значение, любое значение).
Таким образом:

NULL AND FALSE = FALSE, т.к. не важно, что собой представляет NULL, т.к. AND для любого значения с FALSE даст FALSE.
NULL OR TRUE = TRUE. Аналогично. OR при любом значении с TRUE даст TRUE.
NULL OR FALSE = NULL, т.к. здесь все зависит от того, что есть NULL, поэтому в общем случае результат операции неизвестнен - NULL
NOT NULL - так же зависит от того, что есть NULL и также в общем случае результат операции - неопределенность.

6
27 мая 2009 года
George
4.1K / / 05.01.2007
Цитата: oxotnik333
NULL AND TRUE = NULL => 0 * 1 = 0 (null / false)
NULL AND FALSE = FALSE => 0 * 0 = 0 (false)
NULL OR TRUE = TRUE => 0 + 1 = 0 (true)
NULL OR FALSE = NULL = 0 + 0 = 0 (null / false)
NOT NULL = NULL => хз как NOT мат операцией представить


тогда если NULL считать за аналогичное значение FALSE ---> NOT NULL = NOT FALSE = TRUE. И правда странно, или я чего то не понЯл? ))

upd.
Пока я писал, Оракул расставил все точки над i. ))

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог