Обсуждение NULL

Обсуждение NULL

NULL может оказаться довольно сложным для людей, ранее работавших с настольными базами данных, которые просто использовали NULL для хранения "нулевых значений": пустая строка, ноль для чисел, ложь для логических столбцов и т.д. В SQL любой элемент данных в столбце, допускающем пустое значение (то есть в столбце, не имеющем ограничения NOT NULL), будет хранить элемент NULL, если ему не было присвоено никакого значения в операторе DML или в значении по умолчанию для столбца.

Значения по умолчанию для всех столбцов в Firebird допускают пустые значения. Если ваша база данных не была сознательно спроектирована для предотвращения хранения значений NULL, ваши выражения должны быть готовы встретить пустое значение.

NULL в выражениях

NULL не является значением, следовательно, он не может быть "равным" какому-либо значению. Например, воз такой предикат

WHERE (COL1 = NULL)

вернет ошибку, потому что оператор равенства не является действительным для NULL, NULL является состоянием, и правильным предикатом проверки на NULL будет IS NULL. Скорректированный предикат для предыдущего ошибочного тестирования будет иметь вид:

WHERE (COL1 IS NULL)

Вы также можете выполнять проверку на непустое значение:

WHERE (COL1 IS NOT NULL)

Два NULL не равны один другому. При конструировании выражений помните о тех случаях, когда предикат будет сведен к виду:

WHERE <NULL result> = <NULL result>

Здесь результатом всегда будет ложь при сравнении двух NULL. Выражение типа

WHERE COL1 > NULL

будет ошибочным, потому что арифметический оператор недопустим для NULL.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

5.5.3.1. Подделка utime(file, NULL)

Из книги автора

5.5.3.1. Подделка utime(file, NULL) Некоторые более старые системы не устанавливают значения времени доступа и изменения равным текущему времени, когда второй аргумент utime() равен NULL. Однако код более высокого уровня (такой, как GNU touch) проще, если он может полагаться на один


Null (пустой тип) и undefined (неопределенный тип)

Из книги автора

Null (пустой тип) и undefined (неопределенный тип) Если переменная была объявлена с помощью ключевого слова var, но ей еще ни разу не присваивалось значение, она имеет неопределенный тип (undefined):var MyVariable;После выполнения этой строки переменная MyVariable имеет тип undefined. Как уже


Запрет на null-сессию

Из книги автора

Запрет на null-сессию Для запрета null-сессии, которая позволяет другому пользователю, получить информацию о зашаренных (доступных для общего пользования) директориях и об имеющихся на компьютере локальных пользователях, установите параметр типа DWORD °RestrictAnonymous° равным 1 в


1. Обработка обращения к NULL.

Из книги автора

1. Обработка обращения к NULL. Заменяем реализацию оператора -› на:T* operator-›() { if (!tObj) {  cerr ‹‹ "NULL";  tObj = new T; } return tObj;}илиT* operator-›() { if (!tObj) throw CError; return tObj;};Здесь CError класс исключения. Или втыкаем статический экземпляр-шпион.private: T* tObj; // Это было; static T* spy; // Это добавленоНу и сам


4. Null-значения и логические операции

Из книги автора

4. Null-значения и логические операции Обычно в системах управления базами данных непосредственно поддерживаются только три логические операции: отрицание ¬, конъюнкция & и дизъюнкция ?. Операции следования ? и равносильности ? выражаются через них с помощью


5. Null-значения и проверка условий

Из книги автора

5. Null-значения и проверка условий Итак, из всего вышесказанного можно сделать вывод, что в логике систем управления базами данных имеются не два логических значения (True и False), а три, ведь Null-значение также рассматривается как одно из возможных логических значений. Именно


6.5.1. /dev/null

Из книги автора

6.5.1. /dev/null Устройство /dev/null служит двум целям.? Linux удаляет любые данные, направляемые в устройство /dev/null. В тех случаях, когда выводные данные программы не нужны, в качестве выходного файла назначают устройство /dev/null, например:% verbose_command > /dev/null? При чтении из устройства


Атрибут NOT NULL

Из книги автора

Атрибут NOT NULL Включите этот атрибут в описание домена, если вы хотите, чтобы все столбцы, создаваемые на основе этого домена, имели непустое значение.NULL - который является не значением, а состоянием, - всегда будет недопустимым для любого столбца, имеющего атрибут NOT NULL.


Ограничение NOT NULL

Из книги автора

Ограничение NOT NULL Firebird не поддерживает атрибут указания допустимости пустого значения, как это делают некоторые нестандартные СУБД. В соответствии со стандартами все столбцы в Firebird могут содержать пустое значение, если не будет явно указано ограничение NOT NULL.


Предикат IS [NOT] NULL

Из книги автора

Предикат IS [NOT] NULL IS NULL и его противоположность IS NOT NULL являются парой предикатов, которые не используют группирование. Поскольку NULL не является значением, эти операторы не являются операторами сравнения. Они проверяют утверждение, что объект в левой части имеет значение (IS


NULL в выражениях

Из книги автора

NULL в выражениях NULL не является значением, следовательно, он не может быть "равным" какому-либо значению. Например, воз такой предикатWHERE (COL1 = NULL)вернет ошибку, потому что оператор равенства не является действительным для NULL, NULL является состоянием, и правильным предикатом


NULL в вычислениях

Из книги автора

NULL в вычислениях В выражении пустой операнд даст результат вычисления NULL. Например, следующий операторUPDATE TABLEASET COL4 = COL4 + C0L5;присвоит столбцу COL4 значение NULL, если значением COL5 является NULL.В агрегатном (обобщающем) выражении, использующем операторы типа SUMO, AVG() или COUNT (<ИМЯ


NULL и внешние функции (UDF)

Из книги автора

NULL и внешние функции (UDF) NULL не может передавать в виде входа или выхода функции в большинстве библиотек внешних функций, потому что они следуют соглашению InterBase о передаче аргументов по ссылке или по значению. Большинство доступных библиотек UDF используют это соглашение


Установка значения в NULL

Из книги автора

Установка значения в NULL Элемент данных может быть сделан NULL только в столбце, для которого не указано ограничение NOT NULL (СМ. разд. "Ограничение NOT NULL" главы 16).В операторе UPDATE символом назначения является "=":UPDATE FOO SET COL3 = NULLWHERE COL2 = 4;В операторе INSERT передавайте ключевое слово NULL


Глава 28. /dev/zero и /dev/null

Из книги автора

Глава 28. /dev/zero и /dev/null /dev/nullПсевдоустройство /dev/null -- это, своего рода, "черная дыра" в системе. Это, пожалуй, самый близкий смысловой эквивалент. Все, что записывается в этот файл, "исчезает" навсегда. Попытки записи или чтения из этого файла не дают, ровным счетом, никакого