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.
U SQL-u, NULL je i vrijednost i ključna riječ. Prvo pogledajmo NULL vrijednost.
Š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.
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 | |
|---|---|---|---|---|---|---|---|
| 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 |
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.
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 | |
|---|---|---|---|---|---|---|---|
| 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.



