SQL Tips: Harmeja NULL-arvosta

SQL-kyselyissä NULL-arvot aiheuttavat usein harmeja. On tärkeää ymmärtää, että NULL tarkoittaa puuttuvaa arvoa. Se ei tarkoita välilyöntiä eikä nollaa vaan tuntematonta arvoa. Jos mahdollista, pyri muuttamaan NULL-arvot aina joko nollaksi (0) tai tyhjäksi (’’) niin säästyt monelta harmilta.

Totuus on, että tauluista löytyy kuitenkin aina myös NULL-arvoja. Siksi onkin syytä huomioida, ettei NULL käyttäydy samoin kuin muut arvot.

Tässä ensin esimerkkitaulujen tiedot ja esimerkit NULL-arvojen toiminnasta.

alt text

alt text

Jos laskukaavassa on mukana NULL-arvo palauttaa laskenta aina NULL. AlennettuHinta jää siis laskennassa NULL-arvoksi, koska Alennus on NULL.

alt text

NOT IN kyselyssä Fakta-taulun TuoteID on NULL-arvo, joten seuraava lause ei palauta mitään vaikka periaatteessa TuoteID 223 puuttuukin Fakta-taulusta.

alt text

NULL ei toimi taulujen liitoksissa (JOIN tai MERGE). Vaikka molempien taulujen avainkentässä olisi NULL, niin se ei yhdistä rivejä ja rivi jää puuttumaan. Esim. jos Fakta2 taulu olisi samanlainen taulu kuin Fakta ja yhdistetään ne TuoteID sekä Yhtio kenttien avulla. Kysely ei palauta yhtään riviä vaikka TuoteID 222 löytyykin molemmista tauluista ja Yhtio molemmissa on NULL.

alt text

Merge lauseessa syntyy joka kerta uudet rivit, koska NULL-arvo ei yhdistä avaimia.

alt text

Ongelman voi kiertää NULL tarkistuksilla, kuten esim. lisäämällä IS NULL -ehdot tai käyttämällä COALESCE()-funktiota.

alt text

Tai

alt text

Saatat myös ymmärtää NULL-arvon ja tyhjän arvon eron seuraavan havainnollistavan kuvan avulla:

alt text

Kuva: devRant

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *