MySQL ON NULL & EI OLE NULL koos näidetega
⚡ Nutikas kokkuvõte
MySQL IS NULL ja IS NOT NULL on võrdlusmärksõnad, mis kontrollivad, kas veerus on puuduv väärtus. NULL tähistab puuduvaid andmeid, käitub nullist või tühjast stringist erinevalt ja nõuab usaldusväärse filtreerimise jaoks spetsiaalseid operaatoreid.

SQL-is on NULL nii väärtus kui ka märksõna. Vaatleme kõigepealt NULL-väärtust.
Mis on NULL? MySQL?
Lihtsamalt öeldes NULL on kohahoidja andmetele, mida pole olemasTabelites lisamistoimingute tegemisel võib esineda olukordi, kus mõned väljaväärtused pole saadaval.
Tõeliste relatsiooniliste andmebaaside haldussüsteemide nõuete täitmiseks MySQL kasutab esitamata väärtuste kohahoidjana NULL-i. Allolev ekraanipilt näitab, kuidas NULL-väärtused andmebaasitabelis välja näevad.
Pane tähele, et tühjad lahtrid on tähistatud kui NULL, mitte tühi tekst ega null. Enne edasist liikumist vaatame mõningaid NULL-i põhitõdesid.
- NULL ei ole andmetüüp – see tähendab, et seda ei tuvastata kui "int", "date" või mis tahes muud määratletud andmetüüpi.
- Aritmeetilised toimingud kaasates NULL alati tagasta NULLNäiteks 69 + NULL = NULL.
- sild koondfunktsioonid ignoreeri ridu, mis sisaldavad NULL väärtusiAinus erand on COUNT(*), mis loendab iga rida olenemata väärtusest NULL.
Kuidas koondfunktsioonid käsitlevad NULL-i
See reegel muudab päringute vastuseid, seega tõestame seda. Alustame liikmete tabeli praeguse sisuga.
SELECT * FROM `members`;
Ülaltoodud skripti täitmine annab meile järgmised tulemused.
| 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 |
Esiletõstetud veerus „contact_ number“ on kokku üheksa rida, kuid kaks neist on NULL. Loendame kõik liikmed, kes on oma kontaktnumbrit uuendanud.
SELECT COUNT(contact_number) FROM `members`;
Ülaltoodud päringu täitmine annab meile järgmised tulemused.
| COUNT(contact_number) |
|---|
| 7 |
Märge: Vastus on 7, mitte 9, kuna kahte NULL-väärtust ei lisatud. Funktsiooni COUNT(*) käivitamine samal tabelil tagastaks väärtuse 9, kuna COUNT(*) loendab ridu, mitte väärtusi.
NOT NULL Väärtused
Ohutum lähenemisviis on takistada NULL-il kohustuslike veergude sisestamist. See ongi NOT NULL piirangu ülesanne.
Mis on EI Operator?
Loogikaoperaatorit NOT kasutatakse Boole'i tingimuste testimiseks ja see tagastab väärtuse tõene (true), kui tingimus on väär (false). Operaator NOT tagastab väärtuse väär (false), kui testitav tingimus on tõene (true).
| Tingimus | EI Operator Tulemus |
|---|---|
| Tõsi | Vale |
| Vale | Tõsi |
Miks kasutada NOT NULL-i?
On olukordi, kus peame päringu tulemuste komplektil arvutusi tegema ja väärtused tagastama. Mis tahes aritmeetilise tehte tegemine NULL-väärtust sisaldava veeruga tagastab NULL-tulemuse. Selliste olukordade vältimiseks saame kasutada NOT NULL-klauslit, et piirata tulemusi, millega meie andmed töötavad.
Tabeli loomine NOT NULL veeruga
Oletame, et tahame luua tabeli teatud väljadega, millele tuleks uute ridade lisamisel alati väärtused anda. Tabeli loomisel saame antud väljal kasutada NOT NULL klauslit.
Allolev näide loob uue tabeli, mis sisaldab töötajate andmeid. Töötaja number tuleks alati sisestada.
CREATE TABLE `employees`( employee_number int NOT NULL, full_names varchar(255) , gender varchar(6) );
Proovime nüüd sisestada uue kirje ilma töötaja numbrit määramata ja vaatame, mis juhtub.
INSERT INTO `employees` (full_names,gender) VALUES ('Steve Jobs', 'Male');
Ülaltoodud skripti käivitamine MySQL Workbench annab järgmise vea, kuna kohustuslik veerg jäeti välja.
ON NULL ja EI OLE NULL Märksõnad
Piirang blokeerib uued NULL-väärtused. Juba olemasolevate NULL-väärtustega töötamiseks kasutatakse märksõnana NULL-i. Süntaks on järgmine.
column_name IS NULL column_name IS NOT NULL
SIIN
- "ON NULL" on märksõna, mis teostab Boole'i võrdlust. Tagastab tõene, kui esitatud väärtus on NULL, ja false, kui esitatud väärtus ei ole NULL.
- „EI OLE TÜHI” on märksõna, mis teostab vastupidise võrdluse. See tagastab väärtuse „true”, kui antud väärtus ei ole NULL, ja „false”, kui antud väärtus on NULL.
Vaatame praktilist näidet, mis kasutab märksõna IS NOT NULL, et elimineerida kõik read, mis sisaldavad veerus NULL väärtusi.
Jätkates ülaltoodud liikmete tabeliga, oletame, et vajame nende liikmete andmeid, kelle kontaktnumber ei ole NULL. Saame käivitada sellise päringu.
SELECT * FROM `members` WHERE contact_number IS NOT NULL;
Ülaltoodud päringu käivitamine tagastab ainult seitse kirjet, kus kontaktnumber esineb, mis vastab eelmise jaotise COUNT tulemusele.
Oletame nüüd, et me tahame vastupidist: liikmeandmeid, kus kontaktnumber puudub. Saame kasutada järgmist päringut.
SELECT * FROM `members` WHERE contact_number IS NULL;
Ülaltoodud päringu käivitamine annab kaks liikmekirjet, mille kontaktnumber 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 |
Hoiatus: Tingimus, näiteks WHERE kontaktnumber = NULL, tagastab tühja tulemuste komplekti, isegi kui NULL-väärtused eksisteerivad. Võrdsusoperaator ei saa kunagi NULL-väärtust leida, seega on IS NULL ainus õige test.
NULL-väärtuste võrdlemine kolmeväärtuselise loogikaga
Kolme väärtusega loogika – Boole'i tehteid tehes tingimustel, mis hõlmavad NULL-i, saab tagastada „Tundmatu“, „Õige“ või „Vale“.
Märksõna „IS NULL” kasutamine võrdlustoimingute tegemisel kaasates NULL Tulu tõsi or valeTeiste võrdlusoperaatorite kasutamine tagastab „Tundmatu” (NULL)Allolev tabel võrdleb iga avaldist kõrvuti.
| Väljendus | Tulemus | Tähendus |
|---|---|---|
| VALI 5 = 5; | 1 | TRUE |
| VALI NULL = NULL; | NULL | UNKNOWN |
| VALI 5 > 5; | 0 | FALSE |
| VALI NULL > NULL; | NULL | UNKNOWN |
| VALI 5 ON NULL; | 0 | FALSE |
| VALI NULL ON NULL; | 1 | TRUE |
Võrdle arvu viis iseendaga ja korda seejärel toimingut NULL-iga.
SELECT 5 =5; SELECT NULL = NULL;
| 5 =5 | NULL = NULL |
|---|---|
| 1 | NULL |
Esimene tulemus on 1 (TÕENE). Teine on NULL, sest MySQL Ei saa väita, et üks tundmatu väärtus võrdub teise tundmatu väärtusega. Nüüd kasutage samade väärtuste puhul märksõna IS NULL.
SELECT 5 IS NULL; SELECT NULL IS NULL;
| 5 IS NULL | NULL IS NULL |
|---|---|
| 0 | 1 |
Seekord on vastused kindlad: 0 (VÄÄR) ja 1 (TÕENE). Ainult märksõnad IS NULL ja IS NOT NULL annavad kindla vastuse, kui NULL on kaasatud.


