SQL-это null и = null [дубликат]


Возможные Дубликаты:
что такое "=null"и" IS NULL"
есть ли разница между IS NULL и =NULL

в чем разница между

where x is null

и

where x = null

а почему последнее не работает?

4 91

4 ответа:

в SQL сравнение между a null значение и любое другое значение (включая другой null) С помощью оператора сравнения (например =,!=,< и т. д.) приведет к null, которое рассматривается как false для целей предложения where (строго говоря, это "не правда", а не "ложь", но эффект тот же).

рассуждение заключается в том, что a null означает "неизвестный", поэтому результат любого сравнения с null тоже "неизвестно". Так что вы будете не попадайте на строки, кодируя where my_column = null.

SQL предоставляет специальный синтаксис для тестирования, если столбец null, через is null и is not null, что является специальным условием для проверки на null (или null).

вот некоторые SQL, показывающие различные условия и их влияние, как указано выше.

create table t (x int, y int);
insert into t values (null, null), (null, 1), (1, 1);

select 'x = null' as test , x, y from t where x = null
union all
select 'x != null', x, y from t where x != null
union all
select 'not (x = null)', x, y from t where not (x = null)
union all
select 'x = y', x, y from t where x = y
union all
select 'not (x = y)', x, y from t where not (x = y);

возвращает только 1 строку (как и ожидалось):

TEST    X   Y
x = y   1   1

смотрите это работает на SQLFiddle

важно отметить, что NULL не равно NULL.

NULL не является значением и поэтому не может быть сравнено с другим значением.

where x is null проверяет, является ли x нулевым значением.

where x = null проверяет, равен ли x NULL, что никогда не будет истинно

во-первых, это правильный способ проверки, является ли значение поля null пока позже не будет работать так, как вы ожидаете, потому что null - Это специальное значение, которое ничего не равно, поэтому вы не можете использовать сравнение равенства с помощью = для него.

поэтому, когда вам нужно проверить, если значение поля null или нет, использовать:

where x is null

вместо:

where x = null

Я думаю, что равенство-это то, что может быть абсолютно определено. Проблема с null заключается в том, что он по своей сути неизвестен. null в сочетании с любым другим значением null-неизвестно. Требование к SQL " - это моя ценность равна нулю?"было бы неизвестно каждый раз, даже если вход равен нулю. Я думаю, что реализация IS NULL дает это понять.