В SQL Null е както стойност, така и ключова дума. Нека първо разгледаме NULL стойността -
Нула като стойност
С прости думи, NULL е просто притежател на място за данни, които не съществуват. Когато извършвате операции за вмъкване на таблици, те ще бъдат моменти, когато някои стойности на полетата няма да са налични.
За да отговори на изискванията на истинските системи за управление на релационни бази данни, MySQL използва NULL като държач на място за стойностите, които не са изпратени. Екранната снимка по-долу показва как изглеждат NULL стойностите в базата данни.
Нека сега разгледаме някои от основите за NULL, преди да преминем по-нататък в дискусията.
- NULL не е тип данни - това означава, че не се разпознава като "int", "дата" или друг дефиниран тип данни.
- Аритметичните операции, включващи NULL, винаги връщат NULL например, 69 + NULL = NULL.
- Всички обобщени функции засягат само редове, които нямат NULL стойности .
Нека сега демонстрираме как функцията за броене третира нулевите стойности. Нека да видим текущото съдържание на таблицата на членовете-
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 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | This email address is being protected from spambots. You need JavaScript enabled to view it. |
3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
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 |
Нека да преброим всички членове, които са актуализирали своя contact_number
SELECT COUNT(contact_number) FROM `members`;
Изпълнението на горната заявка ни дава следните резултати.
COUNT(contact_number) |
---|
7 |
Забележка: Стойности, които са NULL, не са включени
Какво не е?
Логическият оператор NOT се използва за тестване на булеви условия и връща true, ако условието е false. Операторът NOT връща false, ако тестваното условие е вярно
Състояние |
НЕ резултат от оператора |
Вярно |
Невярно |
Невярно |
Вярно |
Защо да не използвам null?
Ще има случаи, когато ще трябва да извършим изчисления на набор от резултати от заявка и да върнем стойностите. Извършването на всякакви аритметични операции върху колони, които имат стойност NULL, връща нулеви резултати. За да избегнем подобни ситуации, можем да използваме клаузата NOT 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 може да се използва и като ключова дума при извършване на логически операции върху стойности, които включват NULL. Ключовата дума "IS / NOT" се използва заедно с NULL думата за такива цели. Основният синтаксис, когато null се използва като ключова дума, е както следва
`comlumn_name' IS NULL`comlumn_name' NOT NULL
ТУК
- "IS NULL" е ключовата дума, която извършва логическо сравнение. Той връща true, ако предоставената стойност е NULL и false, ако предоставената стойност не е NULL.
- "NOT NULL" е ключовата дума, която извършва логическо сравнение. Връща true, ако предоставената стойност не е NULL и false, ако предоставената стойност е null.
Нека сега разгледаме практически пример, който използва ключовата дума NOT NULL, за да елиминира всички стойности на колоните, които имат нулеви стойности.
Продължавайки с горния пример, да предположим, че се нуждаем от подробности за членовете, чийто номер за контакт не е нула. Можем да изпълним заявка като
SELECT * FROM `members` WHERE contact_number IS NOT 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 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
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 |
Сравняване на нулева стойност s
Логика с три стойности - извършването на логически операции при условия, които включват NULL, може да върне „Неизвестно“, „Вярно“ или „Невярно“.
Например използването на ключовата дума "IS NULL" при извършване на операции за сравнение, включващо NULL, може да върне true или false . Използването на други оператори за сравнение връща "Неизвестно" (NULL).
Да предположим, че сравнявате номер пет с 5
SELECT 5 =5;
Резултатът от заявката е 1, което означава TRUE
5 =5 |
---|
1 |
Нека направим същата операция с NULL
SELECT NULL = NULL;
NULL = NULL |
---|
NULL |
Нека разгледаме друг пример
SELECT 5 > 5;
5> 5 |
---|
0 |
Резултатът от заявката е 0, което означава FALSE
Нека разгледаме същия пример, използвайки NULL
SELECT NULL > NULL;
NULL> NULL |
---|
NULL |
Нека използваме ключовата дума IS NULL
SELECT 5 IS NULL;
5 IS NULL |
---|
0 |
Резултатът от заявката е 0, което е FALSE
SELECT NULL IS NULL;
NULL IS NULL |
---|
1 |
Резултатът от заявката е 1, което е TRUE
Обобщение
- NULL е притежател на място на стойност за незадължителни полета на таблицата.
- MySQL третира NULL стойността по различен начин от другите типове данни. Стойностите NULL, когато се използват в условие, изчисляват фалшивата булева стойност.
- Логическата операция NOT се използва за тестване на булеви стойности и оценява на true, ако булевата стойност е false и false, ако булевата стойност е true.
- Клаузата NOT NULL се използва за премахване на NULL стойности от набор от резултати
- Извършването на аритметични операции върху NULL стойности винаги връща NULL резултати.
- Операторите за сравнение като [, = и т.н.] не могат да се използват за сравняване на NULL стойности.