Умови пошуку при порівнянні зі значенням null

Значення NULL означає, що значення даного стовпця невідомо або неприпустимо. NULL не є синонімом числового або довічного нуля, рядки з нульовою довжиною або порожнього символу. Значення NULL служать для відмінності нульових (для числових стовпців) або порожніх (для символьних стовпців) записів від відсутності записів (NULL як для числових, так і для символьних стовпців).

Значення NULL можна ввести в стовпець, для яких дозволено значення NULL (що зазначено в інструкції CREATE TABLE), двома способами.

SQL Server автоматично вводить значення NULL, якщо в стовпець не було введено дані і якщо немає значення за замовчуванням або обмеження DEFAULT на цей стовпець (або його тип даних).

Користувач може явно ввести значення NULL шляхом введення слова NULL без лапок. Якщо слово NULL вводиться в символьний стовпець в лапках, воно розглядається як поєднання букв N, U, L і L, а не як значення NULL.

При отриманні значень NULL додаток зазвичай відображає у відповідній позиції рядок виду NULL, (NULL) або (null). Наприклад, в стовпці Color таблиці Product дозволені значення NULL:

При порівнянні значень NULL необхідно дотримуватися обережності. Поведінка середовища при такому порівнянні залежить від значення параметра SET ANSI_NULLS.

Якщо значення SET ANSI_NULLS одно ON, порівняння з одним або більше виразами, рівними NULL, не видає результат TRUE або FALSE, а видає UNKNOWN. Це відбувається тому, що невідоме значення неможливо порівняти логічно з будь-яким іншим значенням. Відбувається це в двох випадках: або коли вираз порівнюється з літералом NULL, або коли порівнюються два вирази, одне з яких одно NULL. Наприклад, результатом наступного порівняння завжди є UNKNOWN при параметрі ANSI_NULLS, встановленому в значення ON:

Наступне порівняння також видає результат UNKNOWN кожен раз, коли змінна містить значення NULL:

Мова Transact-SQL підтримує розширення, що дозволяє операторам порівняння повертати TRUE або FALSE при порівнянні зі значеннями NULL. Ця функція активується при установці параметра ANSI_NULLS OFF. Якщо значення ANSI_NULLS одно OFF, порівняння типу ColumnA = NULL повертають значення TRUE, якщо стовпець ColumnA містить значення NULL, і FALSE - якщо стовпець ColumnA містить значення, відмінне від NULL. Крім того, порівняння двох виразів, результатом яких є значення NULL, поверне значення TRUE. Налаштування ANSI_NULLS не впливає на приєднані стовпці, що містять значення NULL. Рядки з приєднаних стовпців, що містять значення NULL, не є частиною результуючого набору. Якщо значення ANSI_NULLS одно OFF, така інструкція SELECT повертає всі рядки таблиці Customer. в яких стовпець Region містить значення NULL:

Незалежно від значення параметра ANSI_NULLS значення NULL завжди вважаються рівними для ключових слів ORDER BY, GROUP BY і DISTINCT. Крім того, унікальний індекс або обмеження UNIQUE, для яких допустимо значення NULL, можуть містити тільки один рядок зі значенням ключа NULL. Наступні рядки зі значенням NULL відхиляються. Для первинного ключа ні в одному з стовпців, які є частиною ключа, не може бути значення NULL.

Результатом обчислень, в яких задіяно значення NULL, є значення NULL, так як якщо хоча б один з факторів невідомий, результат також повинен бути невідомий (UNKNOWN). Наприклад, результатом вираження column1 + 1 є NULL, якщо значення column1 одно NULL.

При пошуку стовпців, включаючи стовпчики зі значеннями NULL, можна знаходити в базі даних значення NULL або відмінні від них за допомогою наступного шаблону:

Схожі статті