5.1 Bristande betydelse

SQL-språket, liksom Java-språket, har ett speciellt nyckelord för att beteckna frånvaron av ett värde - det är null. Eller som det ofta skrivs - NULL.

Användningen NULLi SQL är mycket lik användningen av null i Java. I Java kan det finnas objekt vars fält innehåller nollvärden. I SQL kan det finnas tabeller vars rader innehåller NULL-värden.

Låt mig lägga till ett par omärkta produkter till vår produkttabell med flit. Om produktens märke är okänt blir värdet NULL.

För att visa sådana produkter, låt oss sortera vår produkttabell efter id i omvänd ordning och ta 10 poster. Förfrågan kommer att se ut så här:

SELECT * FROM product
ORDER BY id DESC
LIMIT 10

Vi får följande frågeresultat:

id namn varumärke pris räkna
15 Nit NULL 0,01 1000
14 Skruva NULL 0,10 1000
13 Stå IKEA 100,00 10
12 blomkruka Smartflower 99,00 9
elva Fåtölj Bosch 44.00 8
10 Tallrik Bosch 199.00 10
9 Byrå IKEA 99,00 10
8 Lampa LG 15.00 100
7 TV LG 350,00 4
6 Hylla Bosch 25.00 114

Ja, jag la till nitar och skruvar på bordet. De har pris och kvantitet, men inget märke.

5.2 Jämförelse med NULL

Kommer du ihåg att du ibland brukade bli arg i Java när du använde null? Att du inte kan jämföra variabler som kan referera till nollvärden via equals(). Exempel:

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

Du kommer inte att tro det, men i SQL-språket väntar du också på nyanserna när du arbetar med NULL-värden. Och det låter ungefär så här:ingenting är NULL.

Om du försöker filtrera bort alla produkter vars varumärke är null:

SELECT * FROM product
WHERE brand = NULL

Du får ett tomt bord:

id namn varumärke pris räkna

Men om du skriver i frågan att varumärke inte är lika med NULL, får du samma resultat:

SELECT * FROM product
WHERE brand != NULL

Du får återigen ett tomt bord:

id namn varumärke pris räkna

Varje jämförelse/åtgärd med NULL kommer att returnera NULL:

Uttryck Resultat
varumärke = NULL NULL
varumärke != NULL NULL
NULL = NULL NULL
NULL != NULL NULL

Ja,även om du jämför NULL med NULL, så blir svaret NULL.

5.3 ÄR NULL och ÄR INTE NULL

Så hur kontrollerar vi att något fält (eller någon kolumn) har värdet NULL? Och för detta har SQL ett speciellt uttryck - IS NULL. Det ser ut så här.

variable IS NULL

Om du vill kontrollera om en kolumn i din tabell inte är lika med , NULLmåste du skriva IS NOT NULL:

variable IS NOT NULL

Låt oss skriva en fråga som väljer alla produkter från produkttabellen vars varumärke är lika med NULL. En sådan begäran skulle se ut så här:

SELECT * FROM product
WHERE brand IS NULL

Och vi får följande frågeresultat:

id namn varumärke pris räkna
14 Skruva NULL 0,10 1000
15 Nit NULL 0,01 1000

Låt oss nu visa alla produkter vars pris är mindre än 20 USD:

SELECT * FROM product
WHERE price  < 20

Och vi får följande frågeresultat:

id namn varumärke pris räkna
2 Stol IKEA 5.00 45
8 Lampa LG 15.00 100
14 Skruva NULL 0,10 1000
15 Nit NULL 0,01 1000

Nu anger vi att priset måste vara mindre än 20 USD och att varumärket inte är NULL.

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

Vi får följande frågeresultat:

id namn varumärke pris räkna
2 Stol IKEA 5.00 45
8 Lampa LG 15.00 100

Bra, de två sista raderna är borta. Så här fungerar det. Lite ovanligt, men ändå finns det en viss logik i detta.