Архив за Май 2009

Обработка значения NULL

В синтаксисе SQL значение NULL занимает особое место - оно соответствует понятию “ничего”. Значение NULL не равно пустой строке или нулю, и эта особенность часто порождает ошибки. Рассмотрим несколько примеров:

SELECT NULL=FALSE;
SELECT NULL='';
SELECT NULL=0;
SELECT NULL=NULL;

NULL значения

Результатом всех запросов будет NULL. Это может выглядеть странно, но значение NULL не является значением в полном смысле слова: по определению оно означает отсутствие значения и не принадлежит ни одному типу данных. Поэтому NULL не равно ни логическому значению FALSE, ни пустой строке, ни нулю. При сравнении NULL с любым значением будет получен результат NULL, а не FALSE и не 0. Более того, NULL не равно NULL, и это иллюстрирует последний из приведенных запросов.

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

SELECT * FROM some_table WHERE some_column = NULL;
SELECT * FROM some_table WHERE some_column != NULL;

Такие запросы не вернут ни одной строки. Используйте запросы вида

SELECT * FROM some_table WHERE some_column IS NULL;
SELECT * FROM some_table WHERE some_column IS NOT NULL;