Когда is `x IS NOT NULL` не совпадает с` NOT (x IS NULL) ` - PullRequest
11 голосов
/ 18 мая 2010

Для чего x есть

Выражение x IS NOT NULL равно , не равному NOT(x IS NULL), как в случае 2VL

(цитата из этого ответа , который цитирует Фабиана Паскаля Практические вопросы управления базами данных - справочник для практикующего мышления - ближе к концу этого ответа)

Я предполагаю, что x IS NULL равен NULL, но я не могу догадаться, когда это произойдет (то есть я не проверял стандарт SQL). Это предположение было неверно.

Ответы [ 2 ]

15 голосов
/ 18 мая 2010

Из того, что я прочитал, Фабиан Паскаль имеет в виду не скалярное значение по сравнению с Null, а редко используемый тип ROW. В стандарте идея состояла в том, чтобы вы могли сравнить таблицу (строк), используя IS NULL, чтобы определить, были ли все значения установлены в значение NULL. Таким образом, X IS NULL будет означать, что все значения были установлены на значение NULL, X IS NOT NULL будет означать, что никакие значения не были установлены на значение NULL, а NOT (X IS NULL) будет означать, что не все значения установлены на значение NULL или, иначе существует хотя бы одно значение, не установленное в NULL. Конечно, я слегка наступаю на плечи гигантов здесь, но именно так я интерпретирую его заявление.

10 голосов
/ 18 мая 2010

x IS NULL никогда не будет NULL, поэтому они одинаковы для всех x

Таблица правды ахой:

+--------+-------------+---------+--------------+
|   x    |x IS NOT NULL|x IS NULL|NOT(x IS NULL)|
+--------+-------------+---------+--------------+
|NULL    |    FALSE    |  TRUE   |    FALSE     |
|NOT NULL|    TRUE     |  FALSE  |    TRUE      |
+--------+-------------+---------+--------------+

Обратите внимание, что столбцы два и четыре идентичны для всех потенциальных значений x (* NULL или NOT NULL)

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