В чем разница между «= null» и «IS NULL»? Как они используются по-разному?Что такое «= null» и «IS NULL»
ответ
= NULL
используется для присвоения значению NULL, тогда как IS NULL
используется для определения значения переменной NULL.
Пример sssignment в NULL:
Update TableName Set ColumnName = NULL
Пример сравнения с значением NULL в условной пункте (link):
Select * From TableName Where ColumnName is NULL
ColumnName IS NOT Null
также может быть использован, чтобы убедиться, что значение не-NULL.
В статье WHERE
, column=null
никогда не будет правдой, это не является допустимым использовать нулевой таким образом, вы должны сказать column IS NULL
или column IS NOT NULL
. Это говорит о специальном характере NULL
, это не значение для проверки на равенство, это неизвестное значение, поэтому вам нужно использовать синтаксис или IS NOT
.
Вы можете присвоить что-то значение NULL
с использованием =
равным. Например: UPDATE TableX SET Column=NULL...
ссылки:
Wikipedia NUll (SQL)
w3schools SQL NULL Values
SQL Tutorial, see IS NULL Operator section
«= NULL,» является выражением значения Теперь «IS NULL» является предпочтительным способом для оценки состояния переменной NULL.
Более подробное обсуждение по этому же вопросу можно найти в следующей ссылке
http://www.sqlservercentral.com/articles/T-SQL/understandingthedifferencebetweenisnull/871/
Не уверен, что, если можно прочитать статью без регистрации на сайте, чтобы разместить копирование того же здесь
Понимание разницы между «IS NULL» и «= NULL»
Когда переменная создается в SQL с помощью оператора объявления, она создается без данных и сохраняется в переменная table (vtable) внутри пространства памяти SQL. Vtable содержит имя и адрес памяти переменной. Однако, когда переменная создана, адрес памяти не назначается переменной, и поэтому переменная не определяется в терминах памяти.
Когда вы устанавливаете переменную, ей присваивается адрес памяти, и исходные данные сохраняются в этом адресе. Когда вы снова устанавливаете значение, данные в адресе памяти, на которые указывает переменная, затем изменяются на новое значение.
Теперь о различиях и почему каждый ведет себя так, как он делает.
«= NULL»
«= NULL» является выражением стоимости.Значение, если переменная установлена и память создана для хранения данных, она имеет значение. На самом деле переменная может быть установлена в NULL, что означает, что значение данных объектов неизвестно. Если значение было установлено следующим образом:
DECLARE @val CHAR(4)
SET @val = NULL
Вы явно задать значение данных, неизвестно, и поэтому, когда вы делаете:
If @val = NULL
Он будет оценивать как истинное выражение.
Но если я:
DECLARE @val CHAR(4)
If @val = NULL
Он оценит ложь.
Причина этого заключается в том, что я проверяю значение NULL как значение @val. Поскольку у меня не установлено значение @val, адрес памяти не был назначен, и поэтому для @val не существует значения.
Примечание: См. Раздел «НАСТРОЙКИ ANSI_NULLS (ON | OFF)» из-за различий в значениях по умолчанию SQL 7 и 2000, которые приводят к тому, что примеры не работают. Это основано на SQL 7.
«IS NULL»
Теперь «IS NULL» немного сложнее и является предпочтительным методом для оценки состояния переменной бытия NULL. Когда вы используете предложение «IS NULL», он проверяет как адрес переменной, так и данные внутри переменной как неизвестные. Так что если я, например, делаю:
DECLARE @val CHAR(4)
If @val IS NULL
PRINT ‘TRUE’
ELSE
PRINT ‘FALSE’
SET @val = NULL
If @val IS NULL
PRINT ‘TRUE’
ELSE
PRINT ‘FALSE’
Оба выхода будут ИСТИНА. Причина в первом @val IS NULL Я только объявил эту переменную, и адресное пространство для данных не было установлено, для которого «IS NULL» проверяется. А во втором значение явно установлено в значение NULL, которое также проверяет «IS NULL».
SET ANSI_NULLS (ON | OFF)
Теперь позвольте мне бросить излом в работах. В предыдущих примерах вы видите, что = NULL будет работать до тех пор, пока значение явно задано. Однако, когда вы устанавливаете ANSI_NULLS ON, все будет немного отличаться.
Ex.
DECLARE @val CHAR(4)
SET @val = NULL
SET ANSI_NULLS ON
If @val =NULL
PRINT ‘TRUE’
ELSE
PRINT ‘FALSE’
SET ANSI_NULLS OFF
If @val =NULL
PRINT ‘TRUE’
ELSE
PRINT ‘FALSE’
Вы отметите первый раз при запуске = NULL заявление после выполнения SET ANSI_NULLS ON вы получаете ЛОЖЬ и после установки OFF вы получите TRUE. Причина в следующем.
Выдержка из статьи SQL-BOL «SET ANSI_NULLS»
Стандарт SQL-92 требует, чтобы равенства (=) или не равны (<>) по сравнению с нулевым значением имеет значение FALSE. Когда SET ANSI_NULLS ВКЛЮЧЕН, оператор SELECT с использованием WHERE column_name = NULL возвращает нулевые строки, даже если в столбце есть нулевые значения. Оператор SELECT с использованием WHERE column_name <> NULL возвращает нулевые строки, даже если в столбце есть ненулевые значения.
Когда SET ANSI_NULLS выключен, операторы сравнения Equals (=) и Not Equal To (<>) не следуют стандарту SQL-92. Оператор SELECT с использованием WHERE column_name = NULL возвращает строки с нулевыми значениями в столбце_имя.Оператор SELECT с использованием WHERE column_name <> NULL возвращает строки с ненулевыми значениями в столбце. Кроме того, инструкция SELECT с использованием WHERE column_name <> XYZ_value возвращает все строки, которые не являются значениями XYZ и не являются NULL.
Конец Отрывок
Так как определено SQL92, «= NULL» должен всегда оценивать ложь. Поэтому даже установка значения явно означает, что вы никогда не встретите условие = NULL if, и ваш код может работать не так, как предполагалось. Самая большая причина, по которой = NULL будет стрелять вам в ногу, - это то, что SQL 7 при отправке и установке по умолчанию имеет значение ANSI_NULL OFF, но SQL 2000 по умолчанию имеет значение ANSI_NULL ON. Конечно, вы можете изменить это несколько способов, но если вы обновили базу данных с 7 до 2000 и обнаружили, что = NULL работал только тогда, когда вы устанавливаете, если явно при развертывании сервера 2000 по умолчанию ваш код теперь ломается и может вызвать проблемы с данными.
Еще одна причина использования IS NULL вместо того, чтобы в соответствии с рекомендациями по SQL 92 по-прежнему оценивать значение TRUE и, таким образом, ваш код безопаснее для обновления сервера.
Резюме
Если резюме, если вам нужно проверить, что значение переменной было установлено равным NULL, и вы установили ANSI_NULLS ON, то всегда используйте «IS NULL» положение, чтобы проверить, если переменной нулевой. Используя = NULL, вы можете вызвать у себя много головных болей, пытаясь устранить проблемы, которые могут возникнуть из-за этого, теперь или неожиданно в будущем.
Основа
Некоторые из информации приходит от того, как работает C++ и как SQL ведет себя при каждом обстоятельстве. К сожалению, SQL, насколько мне известно, не имеет функции addressof, позволяющей мне выводить фактический адрес памяти, чтобы показать, что происходит под капотом. В C++ при создании переменной переменная имеет адрес 0xddddddd (в отладке, но это могут быть и другие нереальные адреса). Когда вы устанавливаете переменную, при первом проверке адреса вы получите действительный адрес памяти, в котором хранятся данные. Кроме того, дополнительную информацию можно получить в электронной документации по SQL в разделах по NULL и SET ANSI_NULLS ....
большое спасибо за ваш полный ответ! – user329820
вы бы больше объяснили примечание, которое было написано выше после части «= null» – user329820
- 1. context.getExternalFilesDir (null) is null
- 2. Что такое значение NULL
- 3. Что такое Null?
- 4. Что такое значение null?
- 5. Что такое ошибка "this._processor is null" в firebug?
- 6. TRIGGER и IF IS NULL
- 7. phpMyAdmin: что такое параметр null?
- 8. Что такое ["null"] в javascript?
- 9. Что такое Null в Java
- 10. IF (a.testcol IS NULL, '', a.testcol) IS NOT NULL не работает
- 11. Convert "column = null" to "column is null"?
- 12. SubSonic3 Linq запрос генерирует "IS NOT NULL" вместо "IS NULL"
- 13. BlackBerry responseXML is null
- 14. PropertyChanged is Null UWP
- 15. GameObject.tranform.position is null
- 16. SyndicationItem.Content is Null
- 17. YAPdatabase connexion is null
- 18. Javascript: var is null
- 19. Entity Framework Is Null, Is Not Null Использование DB2
- 20. SessionFactory is null
- 21. AppDomain.CurrentDomain.SetupInformation.PrivateBinPath is null
- 22. ViewWrappedExcepetion error is null, then not null
- 23. ResponseSoapContext.Current is null
- 24. Где используется «IS NULL»
- 25. AuthenticationToken is null
- 26. My JSONObjectWithData is null
- 27. request.form elements is null
- 28. System.Collections.ArrayList.ToArray method is null
- 29. document.body is null
- 30. TypeError document.querySelector (...) is null
Повторяющийся ответ? –
Не «будет», а «должен». (К сожалению.) Как показывает этот гигантский c-n-p из какого-либо другого сайта, по крайней мере одна SQL-система позволяет ему работать (в основном). –
Просто чтобы быть технически корректным, null - это отсутствие значения, а не неизвестное значение. –