Что такое NULL
Особое значение "мы не знаем", которое живёт в базах данных
NULL - это не ноль и не пустой текст. Он означает "здесь нет значения" - информация отсутствует или неизвестна. Из-за этого NULL ведёт себя порой неожиданно, и в этой теме мы научимся работать с ним безопасно.
- объяснить, что на самом деле означает
NULL(и что он не означает), - находить отсутствующие значения с помощью
IS NULLиIS NOT NULL, - понять, почему
= NULLникогда не работает, - предсказывать, что произойдёт, когда
NULLвстречается со сравнениями и арифметикой, - заменять отсутствующие значения удобным значением по умолчанию с помощью
COALESCE.
1. Наша таблица-пример
На протяжении всего урока мы используем одну маленькую школьную таблицу students. Некоторые ячейки специально оставлены пустыми - в этих пустых ячейках хранится NULL.
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(30),
age INT,
club VARCHAR(20),
email VARCHAR(40)
);
INSERT INTO students (id, name, age, club, email) VALUES
(1, 'Ava', 12, 'Chess', 'ava@school.edu'),
(2, 'Ben', 13, NULL, 'ben@school.edu'),
(3, 'Cara', NULL, 'Art', NULL),
(4, 'Dylan', 12, NULL, NULL),
(5, 'Elly', 14, 'Chess', 'elly@school.edu');
Вот вся таблица. Серые значки NULL показывают, где значение отсутствует:
| id | name | age | club | |
|---|---|---|---|---|
| 1 | Ava | 12 | Chess | ava@school.edu |
| 2 | Ben | 13 | NULL | ben@school.edu |
| 3 | Cara | NULL | Art | NULL |
| 4 | Dylan | 12 | NULL | NULL |
| 5 | Elly | 14 | Chess | elly@school.edu |
Бен и Дилан не вступили ни в один club (кружок). Кара не сообщила свой age (возраст). У Кары и Дилана нет email в записях. Все эти пропуски - это NULL.
2. Что означает NULL?
Представьте бумажную анкету. В одном вопросе спрашивают: "В какой кружок ты записался?" - и ученик оставляет его пустым. Вы не знаете ответа: может, он записался и забыл написать, а может, не записался никуда. Клетка просто пуста. В базе данных эта пустая клетка и есть NULL.
NULL означает "отсутствует" или "неизвестно". Это способ базы данных сказать: "у меня здесь нет значения".
0). Это значит, что вы пока не знаете цену. NULL - это отсутствующий ценник, а не цена ноль.