Поскольку база данных обычно представляет собой модель реального мира, отдельные элементы данных в ней неминуемо будут отсутствовать, будут неизвестными или неприменимыми. Например, в столбце QUOTA
таблицы SALESREPS
содержатся плановые объемы продаж для каждого служащего. Однако для одного из новых служащих план еще не был утвержден; соответствующая информация в базе данных отсутствует. Конечно, в столбец QUOTA
для нового служащего можно ввести значение 0, однако это исказит ситуацию. План служащего не равен нулю, а просто "пока неизвестен".
Аналогично столбец MANAGER
в таблице SALESREPS
для каждого служащего содержит идентификатор его менеджера. Однако Сэм Кларк (Sam Clark), вицепрезидент по торговым операциям, не подчиняется никому из отдела сбыта. К нему этот столбец не относится. Можно ввести в столбец MANAGER
для вицепрезидента число 0 или 9999, но ни одно из них не будет настоящим идентификатором начальника Сэма Кларка. Для этой строки не подходит ни одно число.
SQL поддерживает обработку отсутствующих, неизвестных или неприменимых данных с помощью концепции отсутствующего значения. Это значение является индикатором, который показывает, что в конкретной строке определенный элемент данных отсутствует или что столбец вообще не подходит для этой строки. Для удобства говорят, что значение такого элемента данных равно NULL
. Однако null
не является значением данных, как 0, 48300 или "Sam Clark". Напротив, это признак того, что точное значение данных неизвестно или отсутствует. На рис. 1 показано содержимое таблицы SALESREPS
. Обратите внимание на то, что в столбцах quota и rep_office для Тома Снайдера (Tom Snyder) и в столбце MANAGER
для Сэма Кларка (Sam Clark) содержатся значения NULL
. Обратите внимание, что разные SQL-инструменты по-разному выводят это значение: одни — как NULL
, другие — как пустую или заполненную пробелами строку.
Рис. 1. Значения null в таблице salesreps
Во многих ситуациях значения NULL
требуют от СУБД специальной обработки. Например, если пользователь просит вычислить сумму по столбцу QUOTA
, что СУБД должна делать со значениями NULL
при вычислении суммы? Ответ на этот вопрос дает набор правил обработки значений NULL
в различных инструкциях и предложениях SQL. Из-за необходимости включения таких правил в синтаксис языка SQL многие теоретики реляционных баз данных считают, что значения NULL
использовать не следует. Другие, включая доктора Кодда, отстаивают использование различных значений NULL
для ситуаций, когда данные неизвестны или неприменимы.
Независимо от академических споров, значения null стали частью стандарта ANSI/ISO и реализованы почти во всех коммерческих СУБД. Они играют важную практическую роль в производстве SQL-баз данных. О специальных правилах обработки значений NULL
(и отличиях, существующих при обработке таких значений в различных СУБД) рассказывается позже в моем блоге.