Если в ячейку (поле) таблицы вы вводите какие-то значения (буквы, цифры, пробелы или еще что-нибудь), то эти ячейки приобретают так называемые определенныезначения. С определенными значениями, принадлежащими тому или иному типу, можно выполнять какие-то операции. Однако вы можете создать запись (строку) таблицы, ничего не вводя в ее поля (столбцы). Такая запись ничего не содержит. Запись в таблице, которая создана, но в которую не введены конкретные значения, называется пустой. В каждой ячейке пустой записи содержится так называемое неопределенное значение, обозначаемое через NULL. Значение NULL понимается как неопределенное или неизвестное. Итак, каждый раз, когда вы добавляете в таблицу новую запись, не вводя в нее каких-либо конкретных значений, СУБД устанавливает в ее полях значение NULL.
Значение NULL вы можете интерпретировать так, как вам хочется, например, "еще не введено", "пока не известно". Однако независимо от смысловой интерпретации СУБД будет интерпретировать значение NULL вполне определенно. Задумайтесь, подойдет ли эта интерпретация к вашим конкретным целям. В обычных случаях это самая хорошая интерпретация. Но дело в том, как влияет значение типа NULL на результат его участия в тех или иных операциях.
Важно понимать, что число 0 или пустая строка ' ' являются вполне определенными значениями и отличаются от NULL, хотя визуально пустая строка и неопределенное значение могут отображаться одинаково — в виде пустой ячейки таблицы. Многие функции SQL возвращают в зависимости от обстоятельств какое-то определенное значение либо NULL. Это необходимо учитывать при составлении SQL-выражений, поскольку комбинация NULL и других вполне конкретных значений может дать тот или иной результат в зависимости от конкретной операции.
Таблица базы данных может иметь некоторые записи, имеющие неопределенные значения. Такие значения появляются по различным причинам, как уже было отмечено, однако при этом могут возникать неоднозначные ситуации при извлечении данных. Чтобы их избежать, необходимо помнить, что при сравнении любого определенного значения с NULL результат равен false, т. е. любое определенное значение не равно NULL. To же самое происходит при сравнении двух величин, значениями которых являются NULL, т. е. сравнение двух неопределенных величин дает в результате false.
При проектировании баз данных можно указать, что некоторые столбцы не могут иметь значение NULL, т. е. их значения обязательно должны быть определены (при определении столбца в операторе CREATE TABLE указывается NOT NULL). Однако во многих случаях значения NULL являются очень полезными. Так, например, вы можете создать таблицу и ввести в нее сведения, которыми вы располагаете в данный момент, оставив другие значения пока неопределенными. Затем, по мере поступления новой информации, вы можете изменить значения NULL на те, которые стали известны.
В следующем примере из таблицы клиенты выбираются все записи, в которых не определено имя клиента: