Базовая логика SQL значений NOT и NULL при использовании = - PullRequest
0 голосов
/ 14 ноября 2018
select * from dual where not (1=2 );

Возвращена одна строка.

select * from dual where not ( 5=null);

Строки не возвращены.

select * from dual where not (1=2 and 5=null);

Неожиданно возвращена строка.

Я что-то упустил из базового, как НЕработает?Или как работает AND?

Пробовал в Oracle 11 и 12.

1 Ответ

0 голосов
/ 14 ноября 2018

Это все хорошо. Почти любая операция с NULL возвращает NULL, включая =, <> и NOT.

Но давайте разберем это последнее where:

where not (1 = 2 and 5 = null);

совпадает с:

where not (FALSE and NULL)

Ну, AND возвращает FALSE, если любой из операндов равен FALSE - даже если другие * NULL. Посмотрите на это с другой стороны, независимо от того, является ли NULL ИСТИНА или ЛОЖЬ, выражение FALSE.

Следовательно, результат такой же, как:

where TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...