MySQL IS NULL i IS NOT NULL s primjerima

โšก Pametni saลพetak

MySQL IS NULL i IS NOT NULL su kljuฤne rijeฤi za usporedbu koje provjeravaju sadrลพi li stupac nedostajuฤ‡u vrijednost. NULL oznaฤava odsutne podatke, ponaลกa se drugaฤije od nule ili praznog niza i zahtijeva namjenske operatore za pouzdano filtriranje.

  • ๐Ÿงฉ Osnovna definicija: NULL je rezervirano mjesto za podatke koji ne postoje. Nije tip podataka i nije broj nula.
  • โž— Aritmetiฤko ponaลกanje: Bilo koji aritmetiฤki izraz koji sadrลพi NULL vraฤ‡a NULL, pa 69 + NULL vraฤ‡a NULL umjesto 69.
  • ๐Ÿ“Š Agregatni utjecaj: COUNT(stupac) i ostale agregacijske funkcije preskaฤu NULL retke, dok COUNT(*) i dalje broji svaki redak u tablici.
  • ???? NOT NULL Ograniฤenje: Deklarisanje stupca kao NOT NULL odbacuje svaki unos koji izostavlja vrijednost, ลกto ลกtiti obavezna polja poput identifikatora.
  • ๐Ÿ” Ispravno filtriranje: IS NULL i IS NOT NULL su jedini pouzdani testovi, jer operator jednakosti nikada ne odgovara NULL vrijednosti.
  • โš–๏ธ Trovrijednosna logika: Usporedbe s NULL vraฤ‡aju UNKNOWN, pa SELECT NULL = NULL daje NULL umjesto TRUE.

MySQL JE NULL i NIJE NULL

U SQL-u, NULL je i vrijednost i kljuฤna rijeฤ. Prvo pogledajmo NULL vrijednost.

MySQL JE NULL & NIJE NULL

ล to je NULL u MySQL?

Jednostavnim rijeฤima, NULL je rezervirano mjesto za podatke koji ne postojePrilikom izvoฤ‘enja operacija umetanja u tablice, ponekad ฤ‡e neke vrijednosti polja biti nedostupene.

Kako bismo zadovoljili zahtjeve pravih sustava za upravljanje relacijskim bazama podataka, MySQL koristi NULL kao rezervirano mjesto za vrijednosti koje nisu poslane. Snimka zaslona u nastavku prikazuje kako NULL vrijednosti izgledaju u tablici baze podataka.

Null kao vrijednost

Primijetite da su prazne ฤ‡elije oznaฤene s NULL, a ne s praznim tekstom i ne s nulom. Prije nego ลกto krenemo dalje, pogledajte neke osnove funkcije NULL.

  • NULL nije tip podataka โ€“ to znaฤi da se ne prepoznaje kao "int", "date" ili bilo koja druga definirana vrsta podataka.
  • Aritmetiฤke operacije ukljuฤuje NULL uvijek vrati NULL, na primjer, 69 + NULL = NULL.
  • most agregatne funkcije ignoriraj retke koji sadrลพe NULL vrijednostiJedina iznimka je COUNT(*), koja broji svaki redak bez obzira na NULL.

Kako agregatne funkcije tretiraju NULL

Ovo pravilo mijenja odgovore koje vraฤ‡aju upiti za izvjeลกtavanje, pa dokaลพimo to. Poฤnimo s trenutnim sadrลพajem tablice ฤlanova.

SELECT * FROM `members`;

Izvrลกavanje gornje skripte daje nam sljedeฤ‡e rezultate.

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

Istaknuti stupac contact_number sadrลพi ukupno devet redaka, ali dva od njih su NULL. Prebrojimo sve ฤlanove koji su aลพurirali svoj kontaktni broj.

SELECT COUNT(contact_number) FROM `members`;

Izvrลกavanje gornjeg upita daje nam sljedeฤ‡e rezultate.

COUNT(contact_number)
7

Biljeลกka: Odgovor je 7, a ne 9, jer dvije NULL vrijednosti nisu bile ukljuฤene. Pokretanje funkcije COUNT(*) na istoj tablici vratilo bi 9, buduฤ‡i da COUNT(*) broji retke, a ne vrijednosti.

NIJE NULL vrijednosti

Sigurniji pristup je uopฤ‡e sprijeฤiti ulazak NULL-a u obavezne stupce. To je zadatak ograniฤenja NOT NULL.

ล to je NE Operator?

Logiฤki operator NOT koristi se za testiranje Booleovih uvjeta i vraฤ‡a vrijednost true ako je uvjet laลพan. Operator NOT vraฤ‡a vrijednost false ako je uvjet koji se testira istinit.

Stanje NE Operator Rezultat
Pravi Laลพan
Laลพan Pravi

Zaลกto koristiti NOT NULL?

Postojat ฤ‡e sluฤajevi kada ฤ‡emo morati izvrลกiti izraฤune na skupu rezultata upita i vratiti vrijednosti. Izvoฤ‘enje bilo koje aritmetiฤke operacije na stupcu koji sadrลพi NULL vrijednost vraฤ‡a NULL rezultat. Kako bismo izbjegli takve situacije, moลพemo upotrijebiti klauzulu NOT NULL kako bismo ograniฤili rezultate na kojima naลกi podaci operiraju.

Izrada tablice sa stupcem tipa NOT NULL

Pretpostavimo da ลพelimo stvoriti tablicu s odreฤ‘enim poljima koja uvijek trebaju biti ispunjena vrijednostima prilikom umetanja novih redaka. Moลพemo koristiti klauzulu NOT NULL na zadanom polju prilikom stvaranja tablice.

Primjer prikazan u nastavku stvara novu tablicu koja sadrลพi podatke o zaposlenicima. Broj zaposlenika treba uvijek navesti.

CREATE TABLE `employees`(
  employee_number int NOT NULL,
  full_names varchar(255) ,
  gender varchar(6)
);

Pokuลกajmo sada umetnuti novi zapis bez navoฤ‘enja broja zaposlenika i vidjeti ลกto ฤ‡e se dogoditi.

INSERT INTO `employees` (full_names,gender) VALUES ('Steve Jobs', 'Male');

Izvrลกavanje gornje skripte u MySQL Radna tezga daje sljedeฤ‡u greลกku jer je obavezni stupac izostavljen.

NIJE NULL vrijednosti

Kljuฤne rijeฤi IS NULL i IS NOT NULL

Ograniฤenje blokira nove NULL vrijednosti. Za rad s NULL vrijednostima koje veฤ‡ postoje, NULL se koristi kao kljuฤna rijeฤ. Sintaksa je sljedeฤ‡a.

column_name IS NULL
column_name IS NOT NULL

OVDJE

  • "JE NULL" je kljuฤna rijeฤ koja izvodi Booleovu usporedbu. Vraฤ‡a true ako je isporuฤena vrijednost NULL i false ako isporuฤena vrijednost nije NULL.
  • "NIJE NULL" je kljuฤna rijeฤ koja izvodi suprotnu usporedbu. Vraฤ‡a true ako navedena vrijednost nije NULL i false ako je navedena vrijednost NULL.

Pogledajmo praktiฤan primjer koji koristi kljuฤnu rijeฤ IS NOT NULL za uklanjanje svih redaka koji sadrลพe NULL vrijednosti u stupcu.

Nastavljajuฤ‡i s gornjom tablicom ฤlanova, pretpostavimo da su nam potrebni podaci o ฤlanovima ฤiji kontakt broj nije NULL. Moลพemo izvrลกiti upit poput ovog.

SELECT * FROM `members` WHERE contact_number IS NOT NULL;

Izvrลกavanje gornjeg upita vraฤ‡a samo sedam zapisa u kojima je prisutan kontaktni broj, ลกto odgovara rezultatu COUNT iz prethodnog odjeljka.

Sada pretpostavimo da ลพelimo suprotno: zapise ฤlanova gdje nedostaje kontaktni broj. Moลพemo upotrijebiti sljedeฤ‡i upit.

SELECT * FROM `members` WHERE contact_number IS NULL;

Izvrลกavanjem gornjeg upita dobivaju se dva zapisa ฤlanova ฤiji je kontaktni broj 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

Upozorenje: Uvjet kao ลกto je WHERE contact_number = NULL vraฤ‡a prazan skup rezultata, ฤak i ako postoje NULL vrijednosti. Operator jednakosti nikada ne moลพe odgovarati NULL-u, pa je IS NULL jedini ispravan test.

Usporeฤ‘ivanje NULL vrijednosti s trovrijednosnom logikom

Logika tri vrijednosti โ€“ izvoฤ‘enje Booleovih operacija nad uvjetima koji ukljuฤuju NULL moลพe vratiti โ€žNepoznatoโ€œ, โ€žToฤnoโ€œ ili โ€žNetoฤnoโ€œ.

Koriลกtenje kljuฤne rijeฤi โ€žIS NULLโ€œ kada radite operacije usporedbe ukljuฤujuฤ‡i NULL vraฤ‡a istinski or laลพanKoriลกtenje ostalih operatora usporedbe vraฤ‡a โ€žNepoznatoโ€œ (NULL)Donja tablica usporeฤ‘uje svaki izraz jedan pored drugog.

Izraz Proizlaziti Znaฤenje
ODABERI 5 = 5; 1 TRUE
ODABERI NULL = NULL; NULL NEPOZNATI
ODABERITE 5 > 5; 0 FALSE
ODABERI NULL > NULL; NULL NEPOZNATI
ODABERI 5 JE NULL; 0 FALSE
ODABERI NULL JE NULL; 1 TRUE

Usporedite broj pet sa samim sobom, a zatim ponovite operaciju s NULL-om.

SELECT 5 =5;
SELECT NULL = NULL;
5 =5 NULL = NULL
1 NULL

Prvi rezultat je 1 (TRUE). Drugi je NULL, jer MySQL Ne moลพe se tvrditi da je jedna nepoznata vrijednost jednaka drugoj nepoznatoj vrijednosti. Sada upotrijebite kljuฤnu rijeฤ IS NULL na istim vrijednostima.

SELECT 5 IS NULL;
SELECT NULL IS NULL;
5 IS NULL NULL IS NULL
0 1

Ovaj put odgovori su definitivni: 0 (NETOฤŒNO) i 1 (ISTINA). Samo kljuฤne rijeฤi IS NULL i IS NOT NULL vraฤ‡aju definitivan odgovor kada je ukljuฤen NULL.

Pitanja i odgovori

Nula je broj, a prazan niz je tekst, pa oba odgovaraju testovima jednakosti. NULL znaฤi da uopฤ‡e nije unesena nikakva vrijednost, zbog ฤega odgovara samo na IS NULL i IS NOT NULL.

IFNULL(stupac, 'N/A') vraฤ‡a zamjenu kad god je stupac NULL. COALESCE(a, b, c) vraฤ‡a prvi argument koji nije NULL. Oba su korisna unutar MySQL Funkcije i izvjeลกฤ‡a.

Ne. MySQL Automatski primjenjuje NOT NULL na svaki stupac primarnog kljuฤa, jer kljuฤ koji identificira redak ne smije nedostajati. UNIQUE indeks je drugaฤiji i dopuลกta viลกe NULL vrijednosti.

Obiฤno, da. AI asistenti unutar alata kao ลกto su MySQL Radna tezga pretvorite โ€žฤlanove bez telefonskog brojaโ€œ u klauzulu WHERE IS NULL. Revpogledajte filter, jer test jednakosti s NULL-om tiho ne vraฤ‡a niลกta.

ฤŒesto, da. Alati za pregled umjetne inteligencije oznaฤavaju greลกke kao ลกto su = NULL usporedbe, a SELECT koji usrednjava stupac koji sadrลพi NULL i NOT IN liste koje sadrลพe NULL. Konaฤna procjena pripada osobi koja poznaje podatke.

Saลพmite ovu objavu uz: