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.
GO TO FULL VERSION