5.1 Lipsa de semnificație

Limbajul SQL, ca și limbajul Java, are un cuvânt cheie special pentru a indica absența unei valori - este nul. Sau cum se scrie adesea - NULL.

Utilizarea NULLîn SQL este foarte similară cu utilizarea null în Java. În Java, pot exista obiecte ale căror câmpuri conţin valori nule. În SQL, pot exista tabele ale căror rânduri conțin valori NULL.

Permiteți-mi să adaug în mod intenționat câteva produse fără marcă la tabelul nostru de produse. Dacă marca produsului este necunoscută, atunci valoarea va fi NULL.

Pentru a afișa astfel de produse, să sortăm tabelul nostru de produse după id în ordine inversă și să luăm 10 înregistrări. Cererea va arăta astfel:

SELECT * FROM product
ORDER BY id DESC
LIMIT 10

Obținem următorul rezultat al interogării:

id Nume marca Preț numara
15 Nit NUL 0,01 1000
14 Şurub NUL 0,10 1000
13 Stand IKEA 100.00 10
12 ghiveci de flori Smartflower 99.00 9
unsprezece Fotoliu Bosch 44.00 8
10 Farfurie Bosch 199.00 10
9 Dulap IKEA 99.00 10
8 Lampă LG 15.00 100
7 televizor LG 350,00 4
6 Raft Bosch 25.00 114

Da, am adăugat nituri și șuruburi la masă. Au preț și cantitate, dar fără marcă.

5.2 Comparație cu NULL

Îți amintești că, uneori, te-ai supărat în Java când foloseai null? Că nu puteți compara variabile care se pot referi la valori nule prin equals(). Exemplu:

Product product1 = new Product();
Product product2 = null;
if (product2.equals(product1) {  //an exception will be raised here}

Nu veți crede, dar în limbajul SQL așteptați și nuanțele atunci când lucrați cu valori NULL. Și sună cam așa:nimic nu este NULL.

Dacă încercați să filtrați toate produsele a căror marcă este null:

SELECT * FROM product
WHERE brand = NULL

Veți obține un tabel gol:

id Nume marca Preț numara

Dar dacă scrieți în interogare că marca nu este egală cu NULL, veți obține același rezultat:

SELECT * FROM product
WHERE brand != NULL

Veți obține din nou un tabel gol:

id Nume marca Preț numara

Orice comparație/acțiune cu NULL va returna NULL:

Expresie Rezultat
marca = NULL NUL
brand != NULL NUL
NULL = NULL NUL
NULL != NULL NUL

Da,chiar dacă comparați NULL cu NULL, atunci răspunsul va fi NULL.

5.3 ESTE NUL și NU ESTE NUL

Deci, cum verificăm dacă un câmp (sau o coloană) are valoarea NULL? Și pentru aceasta, SQL are o expresie specială - IS NULL. Arata cam asa.

variable IS NULL

Dacă doriți să verificați dacă o coloană a tabelului dvs. nu este egală cu NULL, atunci trebuie să scrieți IS NOT NULL:

variable IS NOT NULL

Să scriem o interogare care va selecta toate produsele din tabelul de produse a căror marcă este egală cu NULL. O astfel de cerere ar arăta astfel:

SELECT * FROM product
WHERE brand IS NULL

Și obținem următorul rezultat al interogării:

id Nume marca Preț numara
14 Şurub NUL 0,10 1000
15 Nit NUL 0,01 1000

Acum să afișăm toate produsele al căror preț este mai mic de 20 USD:

SELECT * FROM product
WHERE price  < 20

Și obținem următorul rezultat al interogării:

id Nume marca Preț numara
2 Scaun IKEA 5.00 45
8 Lampă LG 15.00 100
14 Şurub NUL 0,10 1000
15 Nit NUL 0,01 1000

Acum precizam ca pretul trebuie sa fie mai mic de 20$ iar marca nu este NULL.

SELECT * FROM product
WHERE price  < 20 AND brand IS NOT NULL

Obținem următorul rezultat al interogării:

id Nume marca Preț numara
2 Scaun IKEA 5.00 45
8 Lampă LG 15.00 100

Grozav, ultimele două rânduri au dispărut. Iată cum funcționează. Puțin neobișnuit, dar există totuși o anumită logică în asta.