MySQL IS NULL și IS NOT NULL cu exemple
⚡ Rezumat inteligent
MySQL IS NULL și IS NOT NULL sunt cuvinte cheie de comparație care testează dacă o coloană conține o valoare lipsă. NULL marchează datele absente, se comportă diferit față de zero sau de un șir gol și necesită operatori dedicați pentru o filtrare fiabilă.

În SQL, NULL este atât o valoare, cât și un cuvânt cheie. Să analizăm mai întâi valoarea NULL.
Ce este NULL în MySQL?
In termeni simpli, NULL este un substituent pentru date care nu existăCând efectuați operațiuni de inserare în tabele, vor exista momente în care valorile unor câmpuri nu sunt disponibile.
Pentru a îndeplini cerințele sistemelor adevărate de management al bazelor de date relaționale, MySQL folosește NULL ca substituent pentru valorile care nu au fost trimise. Captura de ecran de mai jos arată cum arată valorile NULL într-un tabel al bazei de date.
Observați că celulele goale sunt marcate cu NULL, nu cu text gol și nu cu zero. Înainte de a continua, analizați câteva dintre elementele de bază ale funcției NULL.
- NULL nu este un tip de date – aceasta înseamnă că nu este recunoscut ca „int”, „date” sau orice alt tip de date definit.
- Operatii aritmetice implicând NULL mereu returnează NULL, de exemplu, 69 + NULL = NULL.
- pod funcții agregate ignoră rândurile care conțin valori NULLSingura excepție este COUNT(*), care numără fiecare rând indiferent de NULL.
Cum tratează funcțiile agregate valorile NULL
Această regulă modifică răspunsurile returnate de interogările de raportare, așa că haideți să o demonstrăm. Începem cu conținutul curent al tabelului membri.
SELECT * FROM `members`;
Executarea scriptului de mai sus ne oferă următoarele rezultate.
| 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 |
Coloana evidențiată contact_number conține nouă rânduri în total, dar două dintre ele sunt NULL. Să numărăm toți membrii care și-au actualizat numărul de contact.
SELECT COUNT(contact_number) FROM `members`;
Executarea interogării de mai sus ne oferă următoarele rezultate.
| COUNT(contact_number) |
|---|
| 7 |
Notă: Răspunsul este 7 și nu 9, deoarece cele două valori NULL nu au fost incluse. Rularea COUNT(*) pe același tabel ar returna 9, deoarece COUNT(*) numără rânduri în loc de valori.
Valori NOT NULL
O abordare mai sigură este de a împiedica complet introducerea valorilor NULL în coloanele obligatorii. Aceasta este sarcina constrângerii NOT NULL.
Ce este NU? Operator?
Operatorul logic NOT este utilizat pentru a testa condițiile booleene și returnează valoarea „true” dacă condiția este „false”. Operatorul NOT returnează „false” dacă condiția testată este „true”.
| Condiție | NU Operator Rezultat |
|---|---|
| Adevărat | Fals |
| Fals | Adevărat |
De ce se folosește NOT NULL?
Vor exista cazuri în care va trebui să efectuăm calcule asupra unui set de rezultate ale unei interogări și să returnăm valorile respective. Efectuarea oricărei operații aritmetice asupra unei coloane care conține o valoare NULL returnează un rezultat NULL. Pentru a evita astfel de situații, putem folosi clauza NOT NULL pentru a limita rezultatele asupra cărora operează datele noastre.
Crearea unui tabel cu o coloană NOT NULL
Să presupunem că vrem să creăm un tabel cu anumite câmpuri care ar trebui să fie întotdeauna furnizate cu valori la inserarea de rânduri noi. Putem folosi clauza NOT NULL pe un anumit câmp la crearea tabelului.
Exemplul de mai jos creează un tabel nou care conține date despre angajați. Numărul angajatului trebuie furnizat întotdeauna.
CREATE TABLE `employees`( employee_number int NOT NULL, full_names varchar(255) , gender varchar(6) );
Să încercăm acum să inserăm o înregistrare nouă fără a specifica numărul angajatului și să vedem ce se întâmplă.
INSERT INTO `employees` (full_names,gender) VALUES ('Steve Jobs', 'Male');
Executarea scriptului de mai sus în MySQL Banc de lucru dă următoarea eroare, deoarece coloana obligatorie a fost omisă.
Cuvinte cheie IS NULL și IS NOT NULL
Constrângerea blochează noile valori NULL. Pentru a lucra cu valori NULL care există deja, se folosește NULL ca și cuvânt cheie. Sintaxa este următoarea.
column_name IS NULL column_name IS NOT NULL
AICI
- „Este nulă” este cuvântul cheie care efectuează comparația booleană. Returnează true dacă valoarea furnizată este NULL și false dacă valoarea furnizată nu este NULL.
- „NU ESTE NUL” este cuvântul cheie care efectuează comparația opusă. Returnează „true” dacă valoarea furnizată nu este NULL și „false” dacă valoarea furnizată este NULL.
Să luăm în considerare un exemplu practic care utilizează cuvântul cheie IS NOT NULL pentru a elimina toate rândurile care conțin valori NULL într-o coloană.
Continuând cu tabelul de membri de mai sus, să presupunem că avem nevoie de detaliile membrilor al căror număr de contact nu este NULL. Putem executa o interogare de genul acesta.
SELECT * FROM `members` WHERE contact_number IS NOT NULL;
Executarea interogării de mai sus returnează doar cele șapte înregistrări în care este prezent numărul de contact, ceea ce corespunde rezultatului COUNT din secțiunea anterioară.
Acum să presupunem că dorim opusul: înregistrările membrului în care lipsește numărul de contact. Putem folosi următoarea interogare.
SELECT * FROM `members` WHERE contact_number IS NULL;
Executarea interogării de mai sus oferă cele două înregistrări de membri al căror număr de contact este NULL.
| membership_ number | full_names | gender | date_of_birth | physical_address | postal_address | contact_ number | |
|---|---|---|---|---|---|---|---|
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
Avertisment: O condiție precum WHERE contact_number = NULL returnează un set de rezultate gol, chiar dacă există valori NULL. Operatorul de egalitate nu poate niciodată să corespundă valorii NULL, așadar IS NULL este singurul test corect.
Compararea valorilor NULL cu logica trivalentă
Logica cu trei valori – efectuarea operațiilor booleene în condiții care implică NULL poate returna „Necunoscut”, „Adevărat” sau „Fals”.
Utilizarea cuvântului cheie „IS NULL” când se efectuează operații de comparație implicând NULL Returnează adevărat or falsFolosirea celorlalți operatori de comparație returnează „Necunoscut” (NUL)Tabelul de mai jos compară fiecare expresie una lângă alta.
| Expresie | Rezultat | Sens |
|---|---|---|
| SELECTAȚI 5 = 5; | 1 | TRUE |
| SELECT NULL = NULL; | NULL | NECUNOSCUT |
| SELECTAȚI 5 > 5; | 0 | FALS |
| SELECTAȚI NULL > NULL; | NULL | NECUNOSCUT |
| SELECT 5 ESTE NULL; | 0 | FALS |
| SELECT NULL IS NULL; | 1 | TRUE |
Comparați numărul cinci cu el însuși, apoi repetați operația cu NULL.
SELECT 5 =5; SELECT NULL = NULL;
| 5 =5 | NULL = NULL |
|---|---|
| 1 | NULL |
Primul rezultat este 1 (TRUE). Al doilea este NULL, deoarece MySQL Nu se poate afirma că o valoare necunoscută este egală cu o altă valoare necunoscută. Acum se folosește cuvântul cheie IS NULL pentru aceleași valori.
SELECT 5 IS NULL; SELECT NULL IS NULL;
| 5 IS NULL | NULL IS NULL |
|---|---|
| 0 | 1 |
De data aceasta, răspunsurile sunt definitive: 0 (FALS) și 1 (ADEVĂRAT). Doar cuvintele cheie IS NULL și IS NOT NULL returnează un răspuns definitiv atunci când este implicat NULL.


