Настав час детальніше поговорити про NULL. І це зовсім не порожня розмова, хоч наш герой і виглядає... ніяк. Якби таблиця була домом, NULL був би його привидом — мовчазним, загадковим і непередбачуваним. Він наче присутній, але на питання не відповідає, у підрахунках не бере участі, порівнянь уникає. Це не просто "порожньо" — це "нічого не відомо".
У світі SQL NULL — не нуль, не порожній рядок і не "немає даних" у звичному сенсі. Це особливий знак невідомості, з яким треба поводитись обережно. Сьогодні розберемося, чому NULL — не просто дивний гість, а важливий учасник будь-якої бази даних. Адже він буквально означає "значення невідоме або не визначене".
Чим NULL відрізняється від порожнього рядка або числа 0?
Багато новачків плутають NULL з іншими значеннями, такими як порожній рядок '' або число 0. Давай розберемо ключові відмінності:
| Поняття | Значення |
|---|---|
NULL |
Повна відсутність значення. Це не просто порожня коробка, це відсутність коробки |
| Порожній рядок | Це рядок, у якого просто немає символів. Наприклад: '' |
Число 0 |
Значення, що представляє конкретне число, рівне нулю |
Приклад з реального життя: уяви, що у тебе є таблиця співробітників, і ти зберігаєш їхні зарплати. Якщо зарплата вказана як 0, значить, людині нічого не заплатили. Якщо ж зарплата вказана як NULL, то ти просто не знаєш, скільки їй платять (або це ще не визначено).
Як інтерпретувати NULL
Тепер, коли ми вже трохи знаємо, що таке NULL, давай подивимось, як з ним працює SQL. Найважливіше про NULL можна передати однією фразою: NULL нічому не дорівнює і нічому не не дорівнює, навіть самому собі.
SELECT NULL = NULL; -- Результат: FALSE
Сюрприз! Чому так? Бо NULL — це невідомість. Якщо у тебе є два невідомих значення, ти не можеш стверджувати, що вони рівні, так само як і те, що вони не рівні.
Давай розберемо кілька прикладів:
Приклади операцій з NULL
SELECT NULL + 1; -- Результат: NULL
SELECT NULL * 100; -- Результат: NULL
SELECT NULL = 0; -- Результат: FALSE
SELECT NULL <> 0; -- Результат: FALSE
NULL при додаванні, множенні чи будь-якому іншому обчисленні завжди повертає NULL. Тут NULL працює не зовсім так, як 0 у математиці. Ми наче кидаємо щось у порожнечу і ця порожнеча все поглинає.
Практичні приклади
Уявімо таблицю students з інформацією про студентів:
| id | name | birth_date | grade |
|---|---|---|---|
| 1 | Alice | 2000-01-01 | 85 |
| 2 | Bob | NULL | 90 |
| 3 | Charlie | 1999-05-22 | NULL |
| 4 | Diana | NULL | NULL |
Приклад 1: Вплив NULL в умовах
Якщо ми спробуємо знайти всіх студентів без дати народження, поставивши умову WHERE birth_date = NULL:
SELECT *
FROM students
WHERE birth_date = NULL;
Ми не отримаємо жодних результатів, бо NULL = NULL повертає FALSE. Для перевірки на NULL треба використовувати IS NULL:
SELECT * FROM students WHERE birth_date IS NULL;
Результат:
| id | name | birth_date | grade |
|---|---|---|---|
| 2 | Bob | NULL | 90 |
| 4 | Diana | NULL | NULL |
Приклад 2: Вплив NULL в обчисленнях
| id | name | birth_date | grade |
|---|---|---|---|
| 1 | Alice | 2000-01-01 | 85 |
| 2 | Bob | NULL | 90 |
| 3 | Charlie | 1999-05-22 | NULL |
| 4 | Diana | NULL | NULL |
Якщо ми спробуємо обчислити середню оцінку для всіх студентів:
SELECT AVG(grade) FROM students;
Результат буде: 87.5. Чому? Бо NULL ігнорується в агрегатних функціях, таких як AVG, SUM, MIN, MAX. Але будь уважний! Якщо тобі треба враховувати рядки з NULL, це потребує додаткових маніпуляцій.
Більш детально ми вивчимо роботу з NULL у наступних лекціях.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ