MySQL ER NULL og ER IKKE NULL med eksempler
โก Smart oppsummering
MySQL IS NULL og IS NOT NULL er sammenligningsnรธkkelord som tester om en kolonne inneholder en manglende verdi. NULL markerer manglende data, oppfรธrer seg annerledes enn null eller en tom streng, og krever dedikerte operatorer for pรฅlitelig filtrering.

I SQL er NULL bรฅde en verdi og et nรธkkelord. La oss fรธrst se pรฅ NULL-verdien.
Hva er NULL i MySQL?
For รฅ si det enkelt, NULL er en plassholder for data som ikke finnesNรฅr du utfรธrer innsettingsoperasjoner pรฅ tabeller, vil det vรฆre tilfeller der enkelte feltverdier ikke er tilgjengelige.
For รฅ mรธte kravene til ekte relasjonsdatabaseadministrasjonssystemer, MySQL bruker NULL som plassholder for verdiene som ikke er sendt inn. Skjermbildet nedenfor viser hvordan NULL-verdier ser ut i en databasetabell.
Legg merke til at de tomme cellene er merket NULL, ikke blank tekst og ikke null. Fรธr vi gรฅr videre, se pรฅ noen av de grunnleggende prinsippene for NULL.
- NULL er ikke en datatype โ dette betyr at den ikke gjenkjennes som en "int", "dato" eller noen annen definert datatype.
- Aritmetiske operasjoner involverer NULL alltid returner NULL, for eksempel 69 + NULL = NULL.
- bro aggregerte funksjoner ignorer rader som inneholder NULL-verdierDet eneste unntaket er COUNT(*), som teller hver rad uavhengig av NULL.
Hvordan aggregatfunksjoner behandler NULL
Denne regelen endrer svarene som rapporteringsspรธrringer returnerer, sรฅ la oss bevise det. Start med det nรฅvรฆrende innholdet i medlemstabellen.
SELECT * FROM `members`;
Utfรธrelse av skriptet ovenfor gir oss fรธlgende resultater.
| 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 |
Den uthevede kolonnen contact_ number inneholder totalt ni rader, men to av dem er NULL. La oss telle alle medlemmer som har oppdatert kontaktnummeret sitt.
SELECT COUNT(contact_number) FROM `members`;
Utfรธrelse av spรธrringen ovenfor gir oss fรธlgende resultater.
| COUNT(contact_number) |
|---|
| 7 |
OBS: Svaret er 7 og ikke 9, fordi de to NULL-verdiene ikke ble inkludert. ร kjรธre COUNT(*) pรฅ samme tabell ville returnere 9, siden COUNT(*) teller rader i stedet for verdier.
IKKE NULL-verdier
En tryggere tilnรฆrming er รฅ hindre NULL i รฅ legge inn obligatoriske kolonner i det hele tatt. Det er jobben til NOT NULL-begrensningen.
Hva er IKKE-et Operator?
Den logiske operatoren NOT brukes til รฅ teste boolske betingelser, og den returnerer sann hvis betingelsen er usann. NOT-operatoren returnerer usann hvis betingelsen som testes er sann.
| Betingelse | IKKE Operator Resultat |
|---|---|
| ekte | Falsk |
| Falsk | ekte |
Hvorfor bruke IKKE NULL?
Det vil vรฆre tilfeller der vi mรฅ utfรธre beregninger pรฅ et spรธrreresultatsett og returnere verdiene. ร utfรธre en aritmetisk operasjon pรฅ en kolonne som inneholder en NULL-verdi returnerer et NULL-resultat. For รฅ unngรฅ slike situasjoner kan vi bruke NOT NULL-klausulen for รฅ begrense resultatene som dataene vรฅre opererer pรฅ.
Opprette en tabell med en IKKE-NULL-kolonne
La oss anta at vi รธnsker รฅ lage en tabell med bestemte felt som alltid skal oppgis med verdier nรฅr vi setter inn nye rader. Vi kan bruke NOT NULL-klausulen pรฅ et gitt felt nรฅr vi oppretter tabellen.
Eksemplet nedenfor oppretter en ny tabell som inneholder ansattdata. Ansattnummeret skal alltid oppgis.
CREATE TABLE `employees`( employee_number int NOT NULL, full_names varchar(255) , gender varchar(6) );
La oss nรฅ prรธve รฅ sette inn en ny post uten รฅ spesifisere ansattnummeret og se hva som skjer.
INSERT INTO `employees` (full_names,gender) VALUES ('Steve Jobs', 'Male');
Utfรธrer skriptet ovenfor i MySQL Workbench gir fรธlgende feil, fordi den obligatoriske kolonnen ble utelatt.
Nรธkkelordene ER NULL og ER IKKE NULL
Begrensningen blokkerer nye NULL-verdier. For รฅ arbeide med NULL-verdier som allerede finnes, brukes NULL som et nรธkkelord. Syntaksen er som fรธlger.
column_name IS NULL column_name IS NOT NULL
HER
- "ER NULL" er nรธkkelordet som utfรธrer den boolske sammenligningen. Den returnerer true hvis den oppgitte verdien er NULL og usann hvis den oppgitte verdien ikke er NULL.
- ยซER IKKE NULLยป er nรธkkelordet som utfรธrer den motsatte sammenligningen. Den returnerer sann hvis den oppgitte verdien ikke er NULL og usann hvis den oppgitte verdien er NULL.
La oss se pรฅ et praktisk eksempel som bruker IS NOT NULL-nรธkkelordet for รฅ eliminere alle radene som inneholder NULL-verdier i en kolonne.
Fortsetter vi med medlemstabellen ovenfor, anta at vi trenger detaljene til medlemmer hvis kontaktnummer ikke er NULL. Vi kan utfรธre en spรธrring som denne.
SELECT * FROM `members` WHERE contact_number IS NOT NULL;
Hvis du kjรธrer spรธrringen ovenfor, returneres bare de syv postene der kontaktnummeret finnes, noe som samsvarer med COUNT-resultatet fra forrige avsnitt.
La oss nรฅ anta at vi รธnsker det motsatte: medlemspostene der kontaktnummeret mangler. Vi kan bruke fรธlgende spรธrring.
SELECT * FROM `members` WHERE contact_number IS NULL;
Ved รฅ kjรธre spรธrringen ovenfor fรฅr du de to medlemspostene med kontaktnummeret 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 |
Advarsel: En betingelse som WHERE contact_number = NULL returnerer et tomt resultatsett, selv om det finnes NULL-verdier. Likhetsoperatoren kan aldri matche NULL, sรฅ IS NULL er den eneste riktige testen.
Sammenligning av NULL-verdier med treverdig logikk
Tre-verdi logikk โ รฅ utfรธre boolske operasjoner pรฅ betingelser som involverer NULL kan returnere ยซUkjentยป, ยซSantยป eller ยซFalskยป.
Bruk av nรธkkelordet ยซIS NULLยป nรฅr du gjรธr sammenligningsoperasjoner involverer NULL avkastning sant or falskBruk av de andre sammenligningsoperatorene returnerer ยซUkjentยป (NULL)Tabellen nedenfor sammenligner hvert uttrykk side om side.
| Uttrykk | Resultat | Betydning |
|---|---|---|
| VELG 5 = 5; | 1 | TRUE |
| VELG NULL = NULL; | NULL | UKJENT |
| VELG 5 > 5; | 0 | FALSK |
| VELG NULL > NULL; | NULL | UKJENT |
| VELG 5 ER NULL; | 0 | FALSK |
| VELG NULL ER NULL; | 1 | TRUE |
Sammenlign tallet fem med seg selv, og gjenta deretter operasjonen med NULL.
SELECT 5 =5; SELECT NULL = NULL;
| 5 =5 | NULL = NULL |
|---|---|
| 1 | NULL |
Det fรธrste resultatet er 1 (SANN). Det andre er NULL, fordi MySQL kan ikke angi at รฉn ukjent verdi er lik en annen ukjent verdi. Bruk nรฅ IS NULL-nรธkkelordet pรฅ de samme verdiene.
SELECT 5 IS NULL; SELECT NULL IS NULL;
| 5 IS NULL | NULL IS NULL |
|---|---|
| 0 | 1 |
Denne gangen er svarene definitive: 0 (USANN) og 1 (SANN). Bare nรธkkelordene IS NULL og IS NOT NULL returnerer et definitivt svar nรฅr NULL er involvert.


