MySQL ON NULL & EI OLE NULL esimerkkien kera
โก รlykรคs yhteenveto
MySQL IS NULL ja IS NOT NULL ovat vertailuhakusanoja, jotka testaavat, puuttuuko sarakkeesta arvo. NULL merkitsee puuttuvaa tietoa, toimii eri tavalla kuin nolla tai tyhjรค merkkijono ja vaatii erilliset operaattorit luotettavaa suodatusta varten.

SQL:ssรค NULL on sekรค arvo ettรค avainsana. Tarkastellaan ensin NULL-arvoa.
Mikรค on NULL-funktio? MySQL?
Yksinkertaisesti sanottuna, NULL on paikkamerkki tiedolle, jota ei ole olemassaKun taulukoihin lisรคtรครคn toimintoja, jotkin kenttien arvot eivรคt aina ole kรคytettรคvissรค.
Tรคyttรครคkseen todellisten relaatiotietokannan hallintajรคrjestelmien vaatimukset, MySQL kรคyttรครค NULL-arvoa paikkamerkkinรค arvoille, joita ei ole lรคhetetty. Alla oleva kuvakaappaus nรคyttรครค, miltรค NULL-arvot nรคyttรคvรคt tietokantataulukossa.
Huomaa, ettรค tyhjรคt solut on merkitty NULL-merkillรค, eivรคtkรค tyhjรคllรค tekstillรค eivรคtkรค nollalla. Ennen kuin jatkat, tutustu NULL-merkinnรคn perusteisiin.
- NULL ei ole tietotyyppi โ tรคmรค tarkoittaa, ettรค sitรค ei tunnisteta "int", "date" tai muuksi mรครคritellyksi tietotyypiksi.
- Aritmeettiset toimenpiteet johon NULL aina palauta NULLesimerkiksi 69 + NULL = NULL.
- bridge kokonaisfunktiot jรคtรค NULL-arvoja sisรคltรคvรคt rivit huomiottaAinoa poikkeus on COUNT(*), joka laskee jokaisen rivin riippumatta siitรค, onko kyseessรค NULL.
Miten aggregaattifunktiot kรคsittelevรคt NULL-arvoa
Tรคmรค sรครคntรถ muuttaa raportointikyselyiden palauttamia vastauksia, joten todistetaan se. Aloitetaan jรคsentaulukon nykyisestรค sisรคllรถstรค.
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 |
Korostetussa yhteystietonumero-sarakkeessa on yhteensรค yhdeksรคn riviรค, mutta kaksi niistรค on TYHJร. Lasketaanpa kaikki jรคsenet, jotka ovat pรคivittรคneet yhteystietonumeronsa.
SELECT COUNT(contact_number) FROM `members`;
Yllรค olevan kyselyn suorittaminen antaa meille seuraavat tulokset.
| COUNT(contact_number) |
|---|
| 7 |
Huomautus: Vastaus on 7 eikรค 9, koska kahta NULL-arvoa ei otettu mukaan. COUNT(*)-funktion suorittaminen samassa taulukossa palauttaisi arvon 9, koska COUNT(*) laskee rivejรค arvojen sijaan.
NOT NULL Arvot
Turvallisempi lรคhestymistapa on estรครค NULL-operaattoria syรถttรคmรคstรค pakollisia sarakkeita ollenkaan. Tรคmรค on NOT NULL -rajoitteen tehtรคvรค.
Mikรค on EI OperaTor?
NOT-operaattoria kรคytetรครคn totuusarvojen testaamiseen, ja se palauttaa arvon true, jos ehto on epรคtosi. NOT-operaattori palauttaa arvon false, jos testattava ehto on tosi.
| Kunto | รLร Operator Tulos |
|---|---|
| Totta | Vรครคrรค |
| Vรครคrรค | Totta |
Miksi kรคyttรครค NOT NULL -arvoa?
Joskus meidรคn on suoritettava laskutoimituksia kyselyn tulosjoukolle ja palautettava arvot. Minkรค tahansa aritmeettisen operaation suorittaminen NULL-arvoa sisรคltรคvรคlle sarakkeelle palauttaa NULL-tuloksen. Tรคllaisten tilanteiden vรคlttรคmiseksi voimme kรคyttรครค NOT NULL -lauseketta rajoittaaksemme tuloksia, joihin datamme vaikuttaa.
Taulukon luominen NOT NULL -sarakkeella
Oletetaan, ettรค haluamme luoda taulukon, jonka tietyille kentille tulisi aina antaa arvot uusia rivejรค lisรคttรคessรค. Voimme kรคyttรครค NOT NULL -lauseketta tietylle kentรคlle taulukkoa luotaessa.
Alla oleva esimerkki luo uuden taulukon, joka sisรคltรครค tyรถntekijรคtiedot. Tyรถntekijรคnumero on aina annettava.
CREATE TABLE `employees`( employee_number int NOT NULL, full_names varchar(255) , gender varchar(6) );
Yritetรครคn nyt lisรคtรค uusi tietue mรครคrittรคmรคttรค tyรถntekijรคnumeroa 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, koska pakollinen sarake on jรคtetty pois.
ON NULL ja EI OLE NULL Avainsanat
Rajoitus estรครค uudet NULL-arvot. Jos NULL-arvoja on jo olemassa, avainsanana kรคytetรครคn NULL-arvoa. Syntaksi on seuraava.
column_name IS NULL column_name IS 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 OLE TYHJร" on avainsana, joka suorittaa pรคinvastaisen vertailun. Se palauttaa arvon true, jos annettu arvo ei ole NULL, ja arvon false, jos annettu arvo on NULL.
Tarkastellaan kรคytรคnnรถn esimerkkiรค, jossa IS NOT NULL -avainsanaa kรคytetรครคn poistamaan kaikki rivit, jotka sisรคltรคvรคt NULL-arvoja sarakkeessa.
Jatkaen yllรค olevaa jรคsentaulukkoa, oletetaan, ettรค tarvitsemme niiden jรคsenten tiedot, joiden yhteystiedot eivรคt ole NULL. Voimme suorittaa seuraavanlaisen kyselyn.
SELECT * FROM `members` WHERE contact_number IS NOT NULL;
Yllรค olevan kyselyn suorittaminen palauttaa vain seitsemรคn tietuetta, joissa yhteystietonumero on, mikรค vastaa edellisen osan COUNT-tulosta.
Oletetaan nyt, ettรค haluamme pรคinvastaisen: jรคsentietueet, joista yhteystietonumero puuttuu. Voimme kรคyttรครค seuraavaa kyselyรค.
SELECT * FROM `members` WHERE contact_number IS NULL;
Yllรค olevan kyselyn suorittaminen antaa kaksi jรคsentietuetta, joiden yhteysnumero on NULL.
| membership_ number | full_names | gender | date_of_birth | physical_address | postal_address | contact_ number | |
|---|---|---|---|---|---|---|---|
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
Varoitus: Ehto, kuten WHERE yhteystieto_numero = NULL, palauttaa tyhjรคn tulosjoukon, vaikka NULL-arvoja on olemassa. Yhtรคsuuruusoperaattori ei voi koskaan vastata NULL-arvoa, joten IS NULL on ainoa oikea testi.
NULL-arvojen vertailu kolmiarvoiseen logiikkaan
Kolmen arvon logiikka โ Boolen operaatioiden suorittaminen ehdoilla, joihin liittyy NULL, voi palauttaa "Tuntematon", "Tosi" tai "Epรคtosi".
Avainsanan โIS NULLโ kรคyttรคminen vertailutoimintoja tehdessรครคn mukana NULL Tuotto totta or vรครคrรคMuiden vertailuoperaattoreiden kรคyttรคminen palauttaa "Tuntematon" (TYHJร)Alla olevassa taulukossa vertaillaan kutakin lauseketta rinnakkain.
| Ilmaisu | Tulos | Merkitys |
|---|---|---|
| VALITSE 5 = 5; | 1 | TOSI |
| VALITSE NULL = NULL; | NULL | TUNTEMATON |
| VALITSE 5 > 5; | 0 | VรรRร |
| VALITSE NULL > NULL; | NULL | TUNTEMATON |
| VALITSE 5 ON TYHJร; | 0 | VรรRร |
| VALITSE NULL ON NULL; | 1 | TOSI |
Vertaa lukua viisi itseensรค ja toista sitten operaatio NULL-arvolla.
SELECT 5 =5; SELECT NULL = NULL;
| 5 =5 | NULL = NULL |
|---|---|
| 1 | NULL |
Ensimmรคinen tulos on 1 (TOSI). Toinen on NULL, koska MySQL Ei voida todeta, ettรค yksi tuntematon arvo on yhtรค suuri kuin toinen tuntematon arvo. Kรคytรค nyt IS NULL -avainsanaa samoille arvoille.
SELECT 5 IS NULL; SELECT NULL IS NULL;
| 5 IS NULL | NULL IS NULL |
|---|---|
| 0 | 1 |
Tรคllรค kertaa vastaukset ovat varmoja: 0 (EPรTOSI) ja 1 (TOSI). Vain avainsanat IS NULL ja IS NOT NULL palauttavat varman vastauksen, kun NULL on mukana.


