MySQL ON NULL & IS NOT NULL Opetusohjelma ESIMERKKEJÄ
SQL:ssä Null on sekä arvo että avainsana. Tarkastellaan ensin NULL-arvoa -
Nolla arvona
Yksinkertaisesti sanottuna NULL on yksinkertaisesti paikkamerkki tiedoille, joita ei ole olemassa. Kun suoritat lisäystoimintoja taulukoille, ne ovat aikoja, jolloin jotkin kenttäarvot eivät ole käytettävissä.
Täyttääkseen todellisten relaatiotietokannan hallintajärjestelmien vaatimukset, MySQL käyttää NULL-arvoa paikanpitäjänä arvoille, joita ei ole lähetetty. Alla oleva kuvakaappaus näyttää, miltä NULL-arvot näyttävät tietokannassa.
Katsotaanpa nyt joitain NULL:n perusasioita ennen kuin siirrymme pidemmälle keskusteluun.
- NULL ei ole tietotyyppi – tämä tarkoittaa, että sitä ei tunnisteta "int", "date" tai muuksi määritellyksi tietotyypiksi.
- Aritmeettiset toimenpiteet johon NULL aina palauta NULL esimerkiksi 69 + NULL = NULL.
- Kaikki kokonaisfunktiot vaikuttavat vain riveihin, joilla ei ole NULL-arvoja.
Osoitetaan nyt, kuinka count-funktio käsittelee nolla-arvoja. Katsotaanpa jäsentaulukon nykyinen sisältö -
SELECT * FROM `members`;
Yllä olevan skriptin suorittaminen antaa meille seuraavat tulokset
membership_ number | full_ names | gender | date_of_ birth | physical_ address | postal_ address | contact_ number | |
---|---|---|---|---|---|---|---|
1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
5 | Leonard Hofstadter | Male | NULL | Woodcrest | NULL | 845738767 | NULL |
6 | Sheldon Cooper | Male | NULL | Woodcrest | NULL | 976736763 | NULL |
7 | Rajesh Koothrappali | Male | NULL | Woodcrest | NULL | 938867763 | NULL |
8 | Leslie Winkle | Male | 14-02-1984 | Woodcrest | NULL | 987636553 | NULL |
9 | Howard Wolowitz | Male | 24-08-1981 | SouthPark | P.O. Box 4563 | 987786553 | lwolowitz[at]email.me |
Lasketaan kaikki jäsenet, jotka ovat päivittäneet yhteystietonsa
SELECT COUNT(contact_number) FROM `members`;
Yllä olevan kyselyn suorittaminen antaa meille seuraavat tulokset.
COUNT(contact_number) |
---|
7 |
Huomautus: Arvoja, jotka ovat NULL, ei ole sisällytetty
Mikä ei ole?
Loogista NOT-operaattoria käytetään Boolen ehtojen testaamiseen ja se palauttaa tosi, jos ehto on epätosi. NOT-operaattori palauttaa epätosi, jos testattu ehto on tosi
Kunto | ÄLÄ Operator Tulos |
---|---|
Totta | Väärä |
Väärä | Totta |
Miksi käyttää NOT nulla?
On tapauksia, joissa meidän on suoritettava laskelmia kyselyn tulosjoukosta ja palautettava arvot. Aritmeettisten toimintojen suorittaminen sarakkeille, joilla on NULL-arvo, palauttaa nollatulokset. Tällaisten tilanteiden välttämiseksi voimme käyttää NOT NULL -lauseketta rajoittaaksemme tuloksia, joihin tietomme toimivat.
NOT NULL Arvot
Oletetaan, että haluamme luoda taulukon, jossa on tietyt kentät, joille tulee aina antaa arvot, kun taulukkoon lisätään uusia rivejä. Voimme käyttää NOT NULL -lausetta tietyssä kentässä taulukkoa luotaessa.
Alla oleva esimerkki luo uuden taulukon, joka sisältää työntekijän tiedot. Työntekijänumero tulee aina ilmoittaa
CREATE TABLE `employees`( employee_number int NOT NULL, full_names varchar(255) , gender varchar(6) );
Yritetään nyt lisätä uusi tietue ilmoittamatta työntekijän nimeä ja katsotaan mitä tapahtuu.
INSERT INTO `employees` (full_names,gender) VALUES ('Steve Jobs', 'Male');
Suoritetaan yllä oleva komentosarja MySQL työpöytä antaa seuraavan virheen -
NULL Avainsanat
NULL-arvoa voidaan käyttää myös avainsanana suoritettaessa Boolen operaatioita arvoille, jotka sisältävät NULL:n. "IS/EI"-avainsanaa käytetään yhdessä NULL-sanan kanssa tällaisiin tarkoituksiin. Perussyntaksi, kun avainsanana käytetään nulla, on seuraava
`comlumn_name' IS NULL `comlumn_name' NOT NULL
TÄÄLTÄ
- "ON NULL on avainsana, joka suorittaa Boolen vertailun. Se palauttaa tosi, jos annettu arvo on NULL ja false, jos annettu arvo ei ole NULL.
- "EI TYHJÄ"on avainsana, joka suorittaa Boolen vertailun. Se palauttaa tosi, jos annettu arvo ei ole NULL ja false, jos annettu arvo on nolla.
Katsotaanpa nyt käytännön esimerkkiä, joka käyttää NOT NULL -avainsanaa poistamaan kaikki sarakearvot, joilla on nolla-arvoja.
Jatkamme yllä olevaa esimerkkiä, oletetaan, että tarvitsemme tiedot jäsenistä, joiden yhteysnumero ei ole tyhjä. Voimme suorittaa kyselyn kuten
SELECT * FROM `members` WHERE contact_number IS NOT NULL;
Yllä olevan kyselyn suorittaminen antaa vain tietueet, joissa yhteyshenkilön numero ei ole tyhjä.
Oletetaan, että haluamme jäsentietueita, joissa yhteyshenkilönumero on tyhjä. Voimme käyttää seuraavaa kyselyä
SELECT * FROM `members` WHERE contact_number IS NULL;
Yllä olevan kyselyn suorittaminen antaa jäsenen tiedot, jonka puhelinnumero on NULL
membership_ number | full_names | gender | date_of_birth | physical_address | postal_address | contact_ number | |
---|---|---|---|---|---|---|---|
1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
5 | Leonard Hofstadter | Male | NULL | Woodcrest | NULL | 845738767 | NULL |
6 | Sheldon Cooper | Male | NULL | Woodcrest | NULL | 976736763 | NULL |
7 | Rajesh Koothrappali | Male | NULL | Woodcrest | NULL | 938867763 | NULL |
8 | Leslie Winkle | Male | 14-02-1984 | Woodcrest | NULL | 987636553 | NULL |
9 | Howard Wolowitz | Male | 24-08-1981 | SouthPark | P.O. Box 4563 | 987786553 | lwolowitz[at]email.me |
Nolla-arvojen vertailu
Kolmen arvon logiikka – Boolen operaatioiden suorittaminen ehdoissa, joihin liittyy NULL, voi joko palauttaa "Tuntematon", "Tosi" tai "Epätosi".
Esimerkiksi käyttämällä avainsanaa "IS NULL". vertailutoimintoja tehdessään mukana NULL voi joko palata totta or väärä. Muiden vertailuoperaattoreiden käyttäminen palauttaa "Tuntematon" (NULL).
Oletetaan, että vertaat numeroa viittä numeroon 5
SELECT 5 =5;
Kyselyn tulos on 1, mikä tarkoittaa TOSI
5 =5 |
---|
1 |
Tehdään sama toimenpide NULL:n kanssa
SELECT NULL = NULL;
NULL = NULL |
---|
NULL |
Katsotaanpa toista esimerkkiä
SELECT 5 > 5;
5 > 5 |
---|
0 |
Kyselyn tulos on 0, mikä tarkoittaa EPÄTOSI
Katsotaanpa samaa esimerkkiä käyttäen NULL
SELECT NULL > NULL;
NULL > NULL |
---|
NULL |
Käytetään avainsanaa IS NULL
SELECT 5 IS NULL;
5 IS NULL |
---|
0 |
Kyselyn tulos on 0, mikä on EPÄTOSI
SELECT NULL IS NULL;
NULL IS NULL |
---|
1 |
Kyselyn tulos on 1, joka on TOSI
Yhteenveto
- NULL on valinnaisten taulukkokenttien arvon paikkamerkki.
- MySQL käsittelee NULL-arvoa eri tavalla kuin muut tietotyypit. NULL-arvot, kun niitä käytetään ehdoissa, evaluoituvat vääräksi Boolen arvoksi.
- Loogista NOT-toimintoa käytetään Boolen arvojen testaamiseen ja arvoksi tosi, jos Boolen arvo on epätosi, ja epätosi, jos Boolen arvo on tosi.
- NOT NULL -lausetta käytetään poistamaan NULL-arvot tulosjoukosta
- Aritmeettisten operaatioiden suorittaminen NULL-arvoille palauttaa aina NULL-tulokset.
- Vertailuoperaattoreita, kuten [, = jne.], ei voida käyttää NULL-arvojen vertailuun.