5.1 Manglende betydning

SQL-sproget har ligesom Java-sproget et særligt nøgleord til at angive fraværet af en værdi - det er null. Eller som det ofte bliver skrevet - NULL.

Brugen NULLi SQL ligner meget brugen af ​​null i Java. I Java kan der være objekter, hvis felter indeholder null-værdier. I SQL kan der være tabeller, hvis rækker indeholder NULL-værdier.

Lad mig tilføje et par umærkede produkter til vores produkttabel med vilje. Hvis produktets mærke er ukendt, vil værdien være NULL.

For at vise sådanne produkter, lad os sortere vores produkttabel efter id i omvendt rækkefølge og tage 10 poster. Anmodningen vil se således ud:

SELECT * FROM product
ORDER BY id DESC
LIMIT 10

Vi får følgende forespørgselsresultat:

id navn mærke pris tælle
15 Nitte NUL 0,01 1000
14 Skrue NUL 0,10 1000
13 Stå IKEA 100,00 10
12 blomsterkrukke Smartflower 99,00 9
elleve Lænestol Bosch 44,00 8
10 Plade Bosch 199,00 10
9 Kommode IKEA 99,00 10
8 Lampe LG 15.00 100
7 TV LG 350,00 4
6 Hylde Bosch 25.00 114

Ja, jeg tilføjede nitter og skruer til bordet. De har pris og mængde, men intet mærke.

5.2 Sammenligning med NULL

Kan du huske, at du nogle gange blev sur i Java, når du brugte null? At du ikke kan sammenligne variabler, der kan referere til nulværdier 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-sproget venter du også på nuancerne, når du arbejder med NULL-værdier. Og det lyder sådan her:intet er NULL.

Hvis du forsøger at bortfiltrere alle produkter, hvis mærke er null:

SELECT * FROM product
WHERE brand = NULL

Du får et tomt bord:

id navn mærke pris tælle

Men hvis du skriver i forespørgslen, at brand ikke er lig med NULL, får du det samme resultat:

SELECT * FROM product
WHERE brand != NULL

Du får igen et tomt bord:

id navn mærke pris tælle

Enhver sammenligning/handling med NULL vil returnere NULL:

Udtryk Resultat
mærke = NULL NUL
mærke != NULL NUL
NULL = NULL NUL
NULL != NULL NUL

Ja,selvom du sammenligner NULL med NULL, så vil svaret være NULL.

5.3 ER NULL og ER IKKE NULL

Så hvordan kontrollerer vi, at et felt (eller en kolonne) har en værdi på NULL? Og til dette har SQL et særligt udtryk - IS NULL. Det ser sådan ud.

variable IS NULL

Hvis du vil tjekke om en kolonne i din tabel ikke er lig med NULL, så skal du skrive IS NOT NULL:

variable IS NOT NULL

Lad os skrive en forespørgsel, der vil vælge alle produkter fra produkttabellen, hvis mærke er lig med NULL. En sådan anmodning ville se sådan ud:

SELECT * FROM product
WHERE brand IS NULL

Og vi får følgende forespørgselsresultat:

id navn mærke pris tælle
14 Skrue NUL 0,10 1000
15 Nitte NUL 0,01 1000

Lad os nu vise alle de produkter, hvis pris er mindre end $20:

SELECT * FROM product
WHERE price  < 20

Og vi får følgende forespørgselsresultat:

id navn mærke pris tælle
2 Stol IKEA 5.00 45
8 Lampe LG 15.00 100
14 Skrue NUL 0,10 1000
15 Nitte NUL 0,01 1000

Nu angiver vi, at prisen skal være mindre end $20, og mærket er ikke NULL.

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

Vi får følgende forespørgselsresultat:

id navn mærke pris tælle
2 Stol IKEA 5.00 45
8 Lampe LG 15.00 100

Godt, de sidste to linjer er væk. Sådan fungerer det. Lidt usædvanligt, men alligevel er der en vis logik i dette.