MySQL IS NULL и IS NOT NULL Учебное пособие с ПРИМЕРАМИ
В SQL Null является одновременно значением и ключевым словом. Давайте сначала посмотрим на значение NULL –
Нуль как значение
Проще говоря, NULL — это просто заполнитель для несуществующих данных. При выполнении операций вставки в таблицы могут возникнуть моменты, когда некоторые значения полей будут недоступны.
Чтобы удовлетворить требования настоящих систем управления реляционными базами данных, MySQL использует NULL в качестве заполнителя для значений, которые не были отправлены. На снимке экрана ниже показано, как значения NULL выглядят в базе данных.
Давайте теперь рассмотрим некоторые основы NULL, прежде чем продолжить обсуждение.
- NULL не является типом данных – это означает, что он не распознается как «int», «date» или любой другой определенный тип данных.
- Арифметические операции с участием NULL, всегда вернуть NULL например, 69 + NULL = NULL.
- Все агрегатные функции влияет только на строки, которые не имеют значений NULL.
Давайте теперь продемонстрируем, как функция count обрабатывает нулевые значения. Давайте посмотрим текущее содержимое таблицы участников:
SELECT * FROM `members`;
Выполнение приведенного выше сценария дает нам следующие результаты
membership_ number | full_ names | gender | date_of_ birth | physical_ address | postal_ address | contact_ number | |
---|---|---|---|---|---|---|---|
1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
5 | Leonard Hofstadter | Male | NULL | Woodcrest | NULL | 845738767 | NULL |
6 | Sheldon Cooper | Male | NULL | Woodcrest | NULL | 976736763 | NULL |
7 | Rajesh Koothrappali | Male | NULL | Woodcrest | NULL | 938867763 | NULL |
8 | Leslie Winkle | Male | 14-02-1984 | Woodcrest | NULL | 987636553 | NULL |
9 | Howard Wolowitz | Male | 24-08-1981 | SouthPark | P.O. Box 4563 | 987786553 | lwolowitz[at]email.me |
Давайте посчитаем всех участников, обновивших свой контактный_номер.
SELECT COUNT(contact_number) FROM `members`;
Выполнение вышеуказанного запроса дает нам следующие результаты.
COUNT(contact_number) |
---|
7 |
Примечание. Значения NULL не включены.
Что не является?
Логический оператор NOT используется для проверки логических условий и возвращает true, если условие ложно. Оператор NOT возвращает false, если проверенное условие истинно.
Состояние | НЕ Operaрезультат |
---|---|
Правда | Ложь |
Ложь | Правда |
Зачем использовать NOT null?
Будут случаи, когда нам придется выполнять вычисления над набором результатов запроса и возвращать значения. Выполнение любых арифметических операций над столбцами, имеющими значение NULL, возвращает нулевые результаты. Чтобы избежать таких ситуаций, мы можем использовать предложение NOT NULL, чтобы ограничить результаты, с которыми работают наши данные.
НЕ НУЛЕВЫЕ значения
Предположим, мы хотим создать таблицу с определенными полями, которые всегда должны содержать значения при вставке новых строк в таблицу. Мы можем использовать предложение NOT NULL для данного поля при создании таблицы.
В приведенном ниже примере создается новая таблица, содержащая данные о сотрудниках. Номер сотрудника всегда должен быть указан.
CREATE TABLE `employees`( employee_number int NOT NULL, full_names varchar(255) , gender varchar(6) );
Давайте теперь попробуем вставить новую запись без указания имени сотрудника и посмотрим, что произойдет.
INSERT INTO `employees` (full_names,gender) VALUES ('Steve Jobs', 'Male');
Выполнение приведенного выше сценария в MySQL Workbench выдает следующую ошибку:
НУЛЕВЫЕ ключевые слова
NULL также можно использовать в качестве ключевого слова при выполнении логических операций над значениями, содержащими NULL. Для таких целей ключевое слово «IS/NOT» используется вместе со словом NULL. Основной синтаксис, когда в качестве ключевого слова используется значение null, выглядит следующим образом.
`comlumn_name' IS NULL `comlumn_name' NOT NULL
ВОТ
- "НУЛЕВОЙ — ключевое слово, выполняющее логическое сравнение. Он возвращает true, если предоставленное значение равно NULL, и false, если предоставленное значение не NULL.
- "НЕ НОЛЬ"— ключевое слово, выполняющее логическое сравнение. Он возвращает true, если предоставленное значение не равно NULL, и false, если предоставленное значение равно null.
Давайте теперь рассмотрим практический пример, в котором ключевое слово NOT NULL используется для исключения всех значений столбца, имеющих нулевые значения.
Продолжая приведенный выше пример, предположим, что нам нужны сведения об участниках, чей контактный номер не равен нулю. Мы можем выполнить запрос типа
SELECT * FROM `members` WHERE contact_number IS NOT NULL;
Выполнение приведенного выше запроса дает только записи, в которых контактный номер не равен нулю.
Предположим, нам нужны записи участников, в которых контактный номер имеет значение null. Мы можем использовать следующий запрос
SELECT * FROM `members` WHERE contact_number IS NULL;
Выполнение приведенного выше запроса дает данные участника, чей контактный номер равен NULL.
membership_ number | full_names | gender | date_of_birth | physical_address | postal_address | contact_ number | |
---|---|---|---|---|---|---|---|
1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
5 | Leonard Hofstadter | Male | NULL | Woodcrest | NULL | 845738767 | NULL |
6 | Sheldon Cooper | Male | NULL | Woodcrest | NULL | 976736763 | NULL |
7 | Rajesh Koothrappali | Male | NULL | Woodcrest | NULL | 938867763 | NULL |
8 | Leslie Winkle | Male | 14-02-1984 | Woodcrest | NULL | 987636553 | NULL |
9 | Howard Wolowitz | Male | 24-08-1981 | SouthPark | P.O. Box 4563 | 987786553 | lwolowitz[at]email.me |
Сравнение нулевых значений
Трехзначная логика – выполнение логических операций в условиях, содержащих NULL, может либо вернуть «Неизвестно», «Правда» или «Ложь».
Например, используя ключевое слово «IS NULL» при выполнении операций сравнения с участием NULL может либо вернуться правда or ложный. Использование других операторов сравнения возвращает «Неизвестно» (NULL).
Предположим, вы сравниваете число пять с числом 5.
SELECT 5 =5;
Результат запроса равен 1, что означает ИСТИНА.
5 =5 |
---|
1 |
Давайте проделаем ту же операцию с NULL
SELECT NULL = NULL;
NULL = NULL |
---|
NULL |
Давайте посмотрим на другой пример
SELECT 5 > 5;
5 > 5 |
---|
0 |
Результат запроса равен 0, что означает ЛОЖЬ.
Давайте посмотрим на тот же пример, используя NULL.
SELECT NULL > NULL;
NULL > NULL |
---|
NULL |
Давайте воспользуемся ключевым словом IS NULL.
SELECT 5 IS NULL;
5 IS NULL |
---|
0 |
Результат запроса равен 0, что является ЛОЖЬЮ.
SELECT NULL IS NULL;
NULL IS NULL |
---|
1 |
Результат запроса равен 1, что соответствует ИСТИНЕ.
Резюме
- NULL — это заполнитель значения для необязательных полей таблицы.
- MySQL обрабатывает значение NULL иначе, чем другие типы данных. Значения NULL при использовании в условии оцениваются как ложное логическое значение.
- Логическая операция NOT используется для проверки логических значений и оценивается как true, если логическое значение ложно, и как ложь, если логическое значение истинно.
- Предложение NOT NULL используется для исключения значений NULL из набора результатов.
- Выполнение арифметических операций над значениями NULL всегда возвращает результаты NULL.
- Операторы сравнения, такие как [, = и т. д.], нельзя использовать для сравнения значений NULL.