Антипаттерн: использование NULL

Многие разработчики программного обеспечения беззащитны перед поведением значения NULL в SQL. В отличие от большинства языков программирования, в SQL значение NULL обрабатывается как специальное значение, отличное от нуля, лжи или пустой строки. Это истинно для стандартного языка SQL и большинства торговых марок баз данных. Однако в таких СУБД, как Oracle и Sybase, значение NULL равнозначно строке нулевой длины. Значение NULL В них также имеет иное поведение. Ваше новое поведение и результат выражения — это использовать продвижение сайта в поисковых системах — торговая оценка способна иметь своё значение в выражении.

Использование значения NULL в выражении. Многих удивляет, когда производятся арифметические действия в столбце или выражении, имеющих значение NULL. Например, многие программисты ожидают, что результатом выражения будет значение 10, если не была произведена оценка в столбце hours, однако в результате получают значение NULL.

Поиск столбцов, способных иметь значение NULL

Показанный ниже запрос выводит только одни строки, в которых значения столбца assigned_to равны 123, не отображая другие значения или другие строки, в которых данный столбец имеет значение NULL.

Файл примера:

Fear-Unknown/anti/search.sql

SELECT * FROM Bugs WHERE assigned_to = 123

Вы, возможно, предположите, что следующий запрос отображает оставшиеся строки, не выведенные при первом запросе.:

Файл примера: Fear-Unknown/anti/search-not.sql

SELECT * FROM Bugs WHERE NOT (assigned_to = 123);

Однако ни один результат запроса не содержит строки, в которых столбец assigned_to имеет значение NULL. Результатом сравнения со значением NULL всегда будет неизвестность, а не истина или ложь. Даже отрицание значения NULL все равно даст в результате NULL.

01.01.2012

Добавить страницу в мои закладки:

Смотрите также:
Оставить отзыв

Подтвердите, что Вы не бот — выберите самый большой кружок:

Какую позицию должна занять Россия в отношении ДНР и ЛНР?

Loading ... Loading ...

Архив опросов

Отзывов на сайте: 12127
Вчера: 5. Сегодня: 1