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.

  • 🧩 Põhidefinitsioon: NULL on kohatäide andmetele, mida pole olemas. See ei ole andmetüüp ega number null.
  • Aritmeetiline käitumine: Iga aritmeetiline avaldis, mis sisaldab NULL-i, tagastab NULL-i, seega 69 + NULL annab tulemuseks NULL-i, mitte 69.
  • 📊 Koondmõju: Funktsioon COUNT(veerg) ja teised koondfunktsioonid jätavad NULL-read vahele, samas kui COUNT(*) loendab ikkagi kõik tabeli read.
  • 🚫 NOT NULL piirang: Veeru NOT NULL deklareerimine lükkab tagasi kõik väärtusest ilma jäetud sisestused, mis kaitseb kohustuslikke välju, näiteks identifikaatoreid.
  • 🔍 Õige filtreerimine: IS NULL ja IS NOT NULL on ainsad usaldusväärsed testid, sest võrdusoperaator ei leia kunagi vastet NULL väärtusele.
  • 🇧🇷 Kolmeväärtuslik loogika: Võrdlused NULL-iga tagastavad TUNDMATA väärtuse, seega SELECT NULL = NULL annab tulemuseks NULL-i TRUE asemel.

MySQL ON NULL ja EI OLE NULL

SQL-is on NULL nii väärtus kui ka märksõna. Vaatleme kõigepealt NULL-väärtust.

MySQL ON NULL JA EI OLE NULL

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.

Null väärtusena

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 email
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 12345rm@tstreet.com
4 Gloria Williams Female 14-02-1984 2nd Street 23 NULL NULL NULL
5 Leonard Hofstadter MaleNULL 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.

NOT NULL Väärtused

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 email
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.

KKK

Null on arv ja tühi string on tekst, seega mõlemad vastavad võrdsuse kontrollile. NULL tähendab, et väärtust ei antud üldse, mistõttu reageerib see ainult IS NULL ja IS NOT NULL väärtustele.

IFNULL(veerg, 'N/A') tagastab asendusväärtuse alati, kui veerg on NULL. COALESCE(a, b, c) tagastab esimese argumendi, mis ei ole NULL. Mõlemad on kasulikud veeru sees. MySQL funktsioonid ja aruanded.

Ei. MySQL rakendab automaatselt igale primaarvõtme veerule väärtuse NOT NULL, kuna rida identifitseerivat võtit ei saa puududa. UNIQUE indeks on teistsugune ja lubab mitut NULL-väärtust.

Tavaliselt jah. Tehisintellekti assistendid tööriistade sees, näiteks MySQL Workbench Muutke „liikmed ilma telefoninumbrita” WHERE veeru IS NULL klausliks. RevVaadake filtrit, sest võrdustest NULL-i suhtes ei tagasta vaikselt midagi.

Tihti jah. Tehisintellekti ülevaatetööriistad märgistavad vigu, näiteks = NULL võrdlusi, a SELECT , mis arvutab keskmise NULL-väärtust sisaldava veeru ja NULL-väärtust sisaldavate NOT IN loendite põhjal. Lõpliku otsuse teeb andmeid tundv isik.

Võta see postitus kokku järgmiselt: