MySQL IS NULL & IS NOT NULL Урок с ПРИМЕРИ

В SQL Null е както стойност, така и ключова дума. Нека първо разгледаме стойността NULL –

MySQL Е НУЛЕВ И НЕ Е НУЛЕВ

Null като стойност

С прости думи, NULL е просто място за данни, които не съществуват. Когато извършвате операции по вмъкване върху таблици, ще има времена, когато някои стойности на полета няма да са налични.

За да отговорим на изискванията на истинските системи за управление на релационни бази данни, MySQL използва NULL като място за стойностите, които не са изпратени. Екранната снимка по-долу показва как изглеждат стойностите 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 email
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 12345rm@tstreet.com
4 Gloria Williams Female 14-02-1984 2nd Street 23 NULL NULL NULL
5 Leonard Hofstadter MaleNULL 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, ако условието е невярно. Операторът NOT връща false, ако тестваното условие е вярно

състояние НЕ Operator Резултат
Вярно Фалшив
Фалшив Вярно

Защо да използвате NOT 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 дава следната грешка-

Стойности NOT NULL

NULL ключови думи

NULL може също да се използва като ключова дума при извършване на булеви операции върху стойности, които включват NULL. Ключовата дума „IS/NOT“ се използва във връзка с NULL думата за такива цели. Основният синтаксис, когато null се използва като ключова дума, е както следва

`comlumn_name'  IS NULL
`comlumn_name' NOT NULL

ТУК

  • „Е НУЛЕВ е ключовата дума, която извършва булевото сравнение. Връща true, ако предоставената стойност е NULL и false, ако предоставената стойност не е NULL.
  • „НЕ 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 email
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, което е FALSE

SELECT NULL IS NULL;

NULL IS NULL
1

Резултатът от заявката е 1, което е ВЯРНО

Oбобщение

  • NULL е място за стойност за незадължителни полета на таблица.
  • MySQL третира стойността NULL по различен начин от другите типове данни. Стойностите NULL, когато се използват в условие, се оценяват на невярна булева стойност.
  • Логическата операция NOT се използва за тестване за булеви стойности и се оценява като true, ако булевата стойност е false и false, ако булевата стойност е true.
  • Клаузата NOT NULL се използва за премахване на NULL стойности от набор от резултати
  • Извършването на аритметични операции върху NULL стойности винаги връща NULL резултати.
  • Операторите за сравнение като [, = и т.н.] не могат да се използват за сравняване на NULL стойности.