Значення null в sql, знайти невідоме значення, is not null

Навіть для невеликих баз даних часто зустрічаються ситуації, коли значення будь-якого поля таблиці може бути невідомо. Причини виникнення подібних ситуацій можуть бути різними, починаючи помилками ПЗ і проектування БД, закінчуючи особливостями бізнес-процесів організації.

Якщо розглянути діаграму таблиці співробітників навчальної БД, то можна помітити, що останній рядок діаграми вказує можливість наявності невідомих значення в конкретному полі, а саме:

  • По батькові. Цілком можливо, що співробітником є ​​громадянин країни, де не використовується по батькові.
  • Дата звільнення може бути відсутнім, так як звільнення ще не було.
  • Група може бути невідома, тому що співробітник може бути не розподілений в групу на якомусь з етапів прийому на роботу.
Значення null в sql, знайти невідоме значення, is not null

Важливо зрозуміти, що невідомі (відсутні) значення - це не нуль (для числових полів) і не порожній рядок (для текстових полів). Так як нуль є цілком конкретним значенням, наприклад, 0 рублів заборгованості, а порожній рядок повідомляє про те, що на даний момент нічого крім рядка нульової довжини в поле рядка бути не повинно. У прикладі з по батькові, наведеному вище, замість значення NULL можна задати порожній рядок і це внесло б додаткову ясність, що по батькові співробітника немає в принципі, а не те, що його забули внести.

Пошук відсутніх значень

Вище було визначено, що NULL не є конкретним значенням, тому потрібно зрозуміти, як оператори порівняння з ним будуть працювати. Ніяке значення не може дорівнювати (також бути більше або менше) невідомому значенню, навіть умова NULL = NULL є хибним. Щоб визначити відсутнє значення використовується спеціальне умова IS NULL (є невідомим). І навпаки, якщо потрібно знайти відомі значення, то задається умова IS NOT NULL.

Розглянемо задачу.
Знайти всіх співробітників, які були коли-небудь звільнені.

Рішення.
Якщо в поле «Дата_увольненія» таблиці співробітників не вказане значення, то співробітники працюють на даний момент. Отже, потрібно знайти рядки, де значення відомо. Наступний sql-запит виведе 7 рядків, які відповідають рішенням:

Рішення.
Дзвінок вважається неприйнятим, якщо в таблиці «Дзвінки» в поле «Співробітник» відсутня id прийняв дзвінок оператора. Отфильтровав таблицю по полях «Співробітник» і «Дата_Время», отримаємо 184 рядки, що задовольняють запиту:

Обробка невідомих значень

Якщо в своїх запитах, Ви будете використовувати поля, які допускають значення NULL, то обов'язково обробляйте такі поля, щоб уникнути помилок. Наприклад, будь-які арифметичні операції або об'єднання рядків, де в якості аргументу буде хоча б одне значення NULL, повернуть невідоме значення.

Розглянемо приклад.
Необхідно визначити стаж роботи кожного співробітника, включаючи звільнених, на поточний момент. Стаж вивести в днях.

Для визначення стажу необхідно знайти інтервал (різницю) між датою найму співробітника і датою звільнення. Для цього можна використовувати функцію DATEDIFF (її опис можна знайти в документації Microsoft). Але як бути з не звільненими працівниками, які не вказане значення дати звільнення? Якщо виконати нижче наведений запит, то можна переконатися, що більшість рядків не покажуть стаж:

Тому опрацюємо поле «Дата_увольненія», застосувавши функції ISNULL (якщо перший аргумент є NULL, то функція повертає другий аргумент) і GETDATE (повертає поточну системну дату і час). Наступний запит виведе стаж в кожному рядку:

Якщо матеріали office-menu.ru Вам допомогли, то підтримайте, будь ласка, проект, щоб ми могли розвивати його далі.

Схожі статті