Ce face IS NULL
NULL înseamnă „fără valoare” sau „necunoscut”. Nu este același lucru cu 0 sau cu un text gol.
Orice comparație cu NULL folosind = sau <> are rezultatul NULL, deci nu este niciodată adevărată. Singurul mod corect de a verifica este IS NULL sau IS NOT NULL.
Exemple
Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.
CREATE TABLE clienti (
id INT PRIMARY KEY,
nume VARCHAR(50) NOT NULL,
oras VARCHAR(30),
email VARCHAR(100)
);
INSERT INTO clienti VALUES
(1, 'Ana Pop', 'Cluj', 'ana@exemplu.ro'),
(2, 'Bogdan Ionescu', 'Sibiu', NULL),
(3, 'Cristina Marin', 'Cluj', 'cristina@exemplu.ro'),
(4, 'Dan Stoica', 'Arad', NULL);
Exemplul 1: Clienți fără adresă de e-mail
SELECT nume FROM clienti WHERE email IS NULL;
Rezultat
+----------------+
| nume |
+----------------+
| Bogdan Ionescu |
| Dan Stoica |
+----------------+
Exemplul 2: Clienți cu adresă de e-mail
SELECT nume, email FROM clienti WHERE email IS NOT NULL;
Rezultat
+----------------+---------------------+
| nume | email |
+----------------+---------------------+
| Ana Pop | ana@exemplu.ro |
| Cristina Marin | cristina@exemplu.ro |
+----------------+---------------------+
Exemplul 3: De ce nu merge = NULL
SELECT COUNT(*) FROM clienti WHERE email = NULL;
SELECT COUNT(*) FROM clienti WHERE email IS NULL;
Rezultat
+----------+
| COUNT(*) |
+----------+
| 0 |
+----------+
+----------+
| COUNT(*) |
+----------+
| 2 |
+----------+
Greșeli frecvente
- Scrii
WHERE email = NULLsauWHERE email != NULL. Ambele găsesc 0 rânduri. - Salvezi texte goale (
'') în unele rânduri șiNULLîn altele. Interogările trebuie să verifice ambele cazuri. Alege o singură convenție.
Comenzi înrudite
COALESCE / IFNULL: Înlocuiește NULL cu o valoare implicită: returnează prima valoare care nu este NULL.WHERE: Filtrează rândurile: păstrează doar rândurile care îndeplinesc o condiție.LEFT JOIN: Leagă două tabele și păstrează toate rândurile din primul, chiar dacă nu au pereche în al doilea.