5.1 Mangel på betydning

SQL-språket, som Java-språket, har et spesielt nøkkelord for å angi fraværet av en verdi - det er null. Eller som det ofte skrives - NULL.

Bruken NULLi SQL er veldig lik bruken av null i Java. I Java kan det være objekter hvis felt inneholder nullverdier. I SQL kan det være tabeller hvis rader inneholder NULL-verdier.

La meg legge til et par umerkede produkter til produkttabellen vår med vilje. Hvis merket til produktet er ukjent, vil verdien være NULL.

For å vise slike produkter, la oss sortere produkttabellen vår etter id i omvendt rekkefølge og ta 10 poster. Forespørselen vil se slik ut:

SELECT * FROM product
ORDER BY id DESC
LIMIT 10

Vi får følgende spørreresultat:

id Navn merke pris telle
15 Nagle NULL 0,01 1000
14 Skru NULL 0,10 1000
1. 3 Stå IKEA 100,00 10
12 blomsterpotte Smartflower 99,00 9
elleve Lenestol Bosch 44,00 8
10 Tallerken Bosch 199,00 10
9 Kommode IKEA 99,00 10
8 Lampe LG 15.00 100
7 TV LG 350,00 4
6 Hylle Bosch 25.00 114

Ja, jeg la nagler og skruer til bordet. De har pris og kvantitet, men ikke noe merke.

5.2 Sammenligning med NULL

Husker du at du noen ganger ble sint i Java når du brukte null? At du ikke kan sammenligne variabler som kan referere til nullverdier via equals(). Eksempel:

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

Du vil ikke tro det, men i SQL-språket venter du også på nyansene når du arbeider med NULL-verdier. Og det høres omtrent slik ut:ingenting er NULL.

Hvis du prøver å filtrere ut alle produkter som har merket null:

SELECT * FROM product
WHERE brand = NULL

Du vil få et tomt bord:

id Navn merke pris telle

Men hvis du skriver i spørringen at merke ikke er lik NULL, vil du få samme resultat:

SELECT * FROM product
WHERE brand != NULL

Du vil igjen få et tomt bord:

id Navn merke pris telle

Enhver sammenligning/handling med NULL vil returnere NULL:

Uttrykk Resultat
merke = NULL NULL
merke != NULL NULL
NULL = NULL NULL
NULL != NULL NULL

Ja,selv om du sammenligner NULL med NULL, vil svaret være NULL.

5.3 ER NULL og ER IKKE NULL

Så hvordan sjekker vi at et felt (eller en kolonne) har en verdi på NULL? Og for dette har SQL et spesielt uttrykk - IS NULL. Det ser slik ut.

variable IS NULL

Hvis du vil sjekke om en kolonne i tabellen din ikke er lik NULL, må du skrive IS NOT NULL:

variable IS NOT NULL

La oss skrive en spørring som vil velge alle produkter fra produkttabellen hvis merke er lik NULL. En slik forespørsel vil se slik ut:

SELECT * FROM product
WHERE brand IS NULL

Og vi får følgende spørreresultat:

id Navn merke pris telle
14 Skru NULL 0,10 1000
15 Nagle NULL 0,01 1000

La oss nå vise alle produktene som har en pris på mindre enn $20:

SELECT * FROM product
WHERE price  < 20

Og vi får følgende spørreresultat:

id Navn merke pris telle
2 Stol IKEA 5.00 45
8 Lampe LG 15.00 100
14 Skru NULL 0,10 1000
15 Nagle NULL 0,01 1000

Nå spesifiserer vi at prisen må være mindre enn $20 og merket er ikke NULL.

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

Vi får følgende spørreresultat:

id Navn merke pris telle
2 Stol IKEA 5.00 45
8 Lampe LG 15.00 100

Flott, de to siste linjene er borte. Slik fungerer det. Litt uvanlig, men likevel er det en viss logikk i dette.