SQL-это null и = null [дубликат]
Возможные Дубликаты:
что такое "=null"и" IS NULL"
есть ли разница между IS NULL и =NULL
в чем разница между
where x is null
и
where x = null
а почему последнее не работает?
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 дает это понять.