5.1 Mancanza di significatività

Il linguaggio SQL, come il linguaggio Java, ha una parola chiave speciale per indicare l'assenza di un valore: è nullo. O come è spesso scritto - NULL.

L'utilizzo NULLin SQL è molto simile all'utilizzo di null in Java. In Java, potrebbero esserci oggetti i cui campi contengono valori nulli. In SQL, potrebbero esserci tabelle le cui righe contengono valori NULL.

Consentitemi di aggiungere apposta un paio di prodotti senza marchio alla nostra tabella dei prodotti. Se la marca del prodotto è sconosciuta, il valore sarà NULL.

Per visualizzare tali prodotti, ordiniamo la nostra tabella dei prodotti per ID in ordine inverso e prendiamo 10 record. La richiesta sarà simile a questa:

SELECT * FROM product
ORDER BY id DESC
LIMIT 10

Otteniamo il seguente risultato della query:

id nome marca prezzo contare
15 Rivetto NULLO 0.01 1000
14 Vite NULLO 0.10 1000
13 In piedi IKEA 100,00 10
12 vaso di fiori Fiore intelligente 99,00 9
undici Poltrona Bosch 44.00 8
10 Piatto Bosch 199,00 10
9 Costumista IKEA 99,00 10
8 Lampada LG 15.00 100
7 tv LG 350,00 4
6 Mensola Bosch 25.00 114

Sì, ho aggiunto rivetti e viti al tavolo. Hanno prezzo e quantità, ma nessuna marca.

5.2 Confronto con NULL

Ricordi che a volte ti arrabbiavi con Java quando usavi null? Che non puoi confrontare variabili che possono fare riferimento a valori nulli tramite equals(). Esempio:

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

Non ci crederai, ma nel linguaggio SQL stai anche aspettando le sfumature quando lavori con valori NULL. E suona qualcosa del genere:niente è NULLO.

Se provi a filtrare tutti i prodotti il ​​cui marchio è null:

SELECT * FROM product
WHERE brand = NULL

Otterrai una tabella vuota:

id nome marca prezzo contare

Ma se scrivi nella query che brand non è uguale a NULL, otterrai lo stesso risultato:

SELECT * FROM product
WHERE brand != NULL

Otterrai di nuovo una tabella vuota:

id nome marca prezzo contare

Qualsiasi confronto/azione con NULL restituirà NULL:

Espressione Risultato
marca = NULLA NULLO
marchio != NULL NULLO
NULLA = NULLA NULLO
NULLA!= NULLA NULLO

SÌ,anche se confronti NULL con NULL, la risposta sarà NULL.

5.3 È NULLA e NON È NULLA

Quindi, come controlliamo che un campo (o una colonna) abbia un valore di NULL? E per questo, SQL ha un'espressione speciale - IS NULL. Sembra così.

variable IS NULL

Se vuoi verificare se una colonna della tua tabella non è uguale a NULL, allora devi scrivere IS NOT NULL:

variable IS NOT NULL

Scriviamo una query che selezionerà tutti i prodotti dalla tabella dei prodotti la cui marca è uguale a NULL. Tale richiesta sarebbe simile a questa:

SELECT * FROM product
WHERE brand IS NULL

E otteniamo il seguente risultato della query:

id nome marca prezzo contare
14 Vite NULLO 0.10 1000
15 Rivetto NULLO 0.01 1000

Ora mostriamo tutti i prodotti il ​​cui prezzo è inferiore a $ 20:

SELECT * FROM product
WHERE price  < 20

E otteniamo il seguente risultato della query:

id nome marca prezzo contare
2 Sedia IKEA 5.00 45
8 Lampada LG 15.00 100
14 Vite NULLO 0.10 1000
15 Rivetto NULLO 0.01 1000

Ora specifichiamo che il prezzo deve essere inferiore a $20 e il marchio no NULL.

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

Otteniamo il seguente risultato della query:

id nome marca prezzo contare
2 Sedia IKEA 5.00 45
8 Lampada LG 15.00 100

Fantastico, le ultime due righe sono sparite. Ecco come funziona. Un po 'insolito, ma c'è ancora una certa logica in questo.