Към съдържанието
wannacode

NULL: няма стойност

Проблем

Клиентът, който изчезна

Маркетингът иска да пише на всички клиенти извън София. В базата има 20 клиента, 6 от тях са от София. Очакваш 14:

SQLбаза: магазин

Излизат 13. Кой липсва? Борис Митев, който не е казал от кой град е. Не е от София, а го няма в резултата.

Идеята

Неизвестно

Градът на Борис е NULL: липса на стойност. Не е празен текст и не е нула. Значи „не знаем“.

Затова SQL работи с три отговора: вярно, невярно и неизвестно. „Градът на Борис различен ли е от София?“ Не знаем, градът му е неизвестен. Отговорът е „неизвестно“, а WHERE пази само редовете, за които е вярно.

Същото става и при търсене на NULL с =:

SQLбаза: магазин

Нищо. NULL = NULL също е „неизвестно“: две неизвестни стойности може да са еднакви, а може и да не са.

Идеята

IS NULL

За NULL има отделна проверка: IS NULL, и обратната ѝ IS NOT NULL.

SQLбаза: магазин

Това е единственият верен начин. = NULL е грешка, която не дава съобщение, а просто празен резултат.

Пробвай

Без категория

Покажи името и цената на продуктите, които нямат категория. Полето вече има един опит. Пусни го и го поправи.

SQLбаза: магазин

Пробвай

Всички извън София

Поправи заявката от началото на урока: всички клиенти извън София, и тези без град.

SQLбаза: магазин

Виж го

NOT IN и един NULL

Списък в NOT IN, в който има NULL, връща празен резултат:

SQLбаза: магазин

Защо? city NOT IN ('София', NULL) значи city <> 'София' AND city <> NULL. Второто е винаги „неизвестно“, значи цялото условие никога не е вярно.

На ръка рядко ще напишеш NULL в списък. Но когато списъкът идва от друга заявка, а там има NULL, ще получиш празен отчет без никаква грешка. Ще го срещнем пак при подзаявките.

Упражнение

Продуктите в категория

Покажи името и категорията на всички продукти, които имат категория.

SQLбаза: магазин

Тест

Провери се

1. Какво е NULL?
2. Какъв е резултатът от NULL = NULL?
3. Кое намира продуктите без категория?

Създаден от Иво Гергов като част от кампанията на Evo Tech за достъпно обучение по програмиране ·