Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

Пустые данные

Большинство баз данных позволяют хранить значения типа NULL для любых поддерживаемых типов данных. Неопытные программисты и разработчики, работающие на SQL, часто думают, что NULL — это ноль или пробел. На самом деле это пи то ни другое. В SQL 2003 значение NULL буквально означает, что значение неизвестно или является неопределенным. (А нужно его считать неизвестным или неопределенным -это предмет ученых дискуссий.) Такая дифференциация позволяет разработчику базы данных различать те сущности, в которых сознательно введены нулевые значения (например), и те, в которых данные не записаны в систему или явно введены в форме NULL. Чтобы показать это семантическое различие, рассмотрим систему, осуществляющую фиксирование платежей. Если для цены продукта указано значение NULL, это не означает, что продукт бесплатный. NULL показывает, что величина стоимости неизвестна или, возможно, еще не определена.

Платформы баз данных весьма различаются в том, как они обрабатывают значения NULL. Это приводит к существенным проблемам при переносе данных, включающих значения NULL, между платформами. Например, пустая строка (то есть строка, равная NULL) в базах Oracle вставляется как значение NULL. Все прочие базы данных, рассматриваемые в этой книге, за исключением Sybase, вставляют пустую строку в столбцы значений VARCHAR или CHAR.

В стандарте ANSI не говорится, как нужно проводить сортировку. Платформы должны сами предоставлять общие методы сортировки для конкретного языка.

Более того, в базах данных на основе SQL также применяются наборы символов (character sets) и сопоставлений (collations). Наборы символов — это «символы» или «алфавиты», используемые в «языке» данных. Например, американский английский набор символов не содержит буквы п, характерной для испанского набора символов. Сопоставления представляют собой множество правил сортировки, применяемых к набору символов. Сопоставление определяет, как данная операция манипуляции данными будет их сортировать. Например, американский английский набор символов можно сортировать по алфавиту с учетом регистра и по алфавиту без учета регистра.

Одним из побочных эффектов неопределенного характера значений NULL является то, что их нельзя использовать в вычислениях или сравнениях. Вот несколько кратких, но очень важных правил стандарта ANSI о поведении значений NULL, которые необходимо запомнить при использовании таких значений в инструкциях SQL.

  • Значения типа NULL нельзя вставлять в столбцы, определенные как NOT NULL. Значения NULL не равны друг другу. Распространенная ошибка — сравнивать два столбца, содержащие значения NULL, и ожидать, что они совпадут. (Правильный метод идентификации значений NULL в предложениях WHERE или в булевых выражениях — это использование таких выражений, как «value IS NULL» и «value IS NOT NULL».)
  • Столбец, содержащий значение NULL, игнорируется при вычислении агрегатных значений, таких, как A VG, SUM или MAX. COUNT.
  • Если столбцы, содержащие значения NULL, перечислены в предложении GROUP BY запроса, выходные данные запроса будут содержать для значений NULL всего одну строку. По сути стандарт ANSI рассматривает все найденные значения NULL как одну группу.

В предложениях DISTINCT или ORDER BY, как и в предложении GROUP BY, значения NULL не отличаются друг от друга. Для предложения ORDER BY производитель платформы сам выбирает, нужно ли по умолчанию ставить значения NULL в начало или в конец полученного набора данных.

Источник