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ă.

  • 🧩 Definiția de bază: NULL este un substituent pentru date care nu există. Nu este un tip de date și nu este numărul zero.
  • Comportament aritmetic: Orice expresie aritmetică care implică NULL returnează NULL, deci 69 + NULL se evaluează ca NULL în loc de 69.
  • 📊 Impact agregat: COUNT(coloană) și alte funcții de agregare sar peste rândurile NULL, în timp ce COUNT(*) numără în continuare fiecare rând din tabel.
  • 🚫 Constrângere NOT NULL: Declararea unei coloane NOT NULL respinge orice inserare care omite o valoare, ceea ce protejează câmpurile obligatorii, cum ar fi identificatorii.
  • 🔍 Filtrare corectă: IS NULL și IS NOT NULL sunt singurele teste fiabile, deoarece operatorul de egalitate nu se potrivește niciodată cu o valoare NULL.
  • 🇧🇷 Logică trivalentă: Comparațiile cu NULL returnează UNKNOWN, deci SELECT NULL = NULL produce NULL în loc de TRUE.

MySQL ESTE NULL și NU ESTE NULL

În SQL, NULL este atât o valoare, cât și un cuvânt cheie. Să analizăm mai întâi valoarea NULL.

MySQL ESTE NUL și NU ESTE NUL

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.

Null ca valoare

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 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

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ă.

Valori NOT NULL

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 email
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.

Întrebări frecvente

Zero este un număr, iar un șir gol este text, deci ambele teste de egalitate corespund. NULL înseamnă că nu a fost furnizată nicio valoare, motiv pentru care răspunde doar la IS NULL și IS NOT NULL.

IFNULL(coloană, 'N/A') returnează substitutul ori de câte ori coloana este NULL. COALESCE(a, b, c) returnează primul argument care nu este NULL. Ambele sunt utile în interiorul MySQL funcții și rapoarte.

Nu. MySQL aplică automat NOT NULL fiecărei coloane cu cheie primară, deoarece o cheie care identifică un rând nu poate lipsi. Un index UNIQUE este diferit și permite valori NULL multiple.

De obicei, da. Asistenți AI în cadrul unor instrumente precum MySQL Banc de lucru transformă „membrii fără număr de telefon” într-o clauză WHERE coloana IS NULL. RevVedeți filtrul, deoarece un test de egalitate față de NULL nu returnează nimic în mod silențios.

Adesea, da. Instrumentele de revizuire a inteligenței artificiale semnalează erori precum comparații NULL, a SELECT care calculează media unei coloane care conține valori NULL și a unei liste NOT IN care conține valori NULL. Judecata finală aparține persoanei care cunoaște datele.

Rezumați această postare cu: