MySQL ER NULL & ER IKKE NULL med eksempler
โก Smart opsummering
MySQL IS NULL og IS NOT NULL er sammenligningsnรธgleord, der tester, om en kolonne indeholder en manglende vรฆrdi. NULL markerer manglende data, opfรธrer sig anderledes end nul eller en tom streng og krรฆver dedikerede operatorer for pรฅlidelig filtrering.

I SQL er NULL bรฅde en vรฆrdi og et nรธgleord. Lad os fรธrst se pรฅ NULL-vรฆrdien.
Hvad er NULL i MySQL?
I enkle vendinger, NULL er en pladsholder for data, der ikke findesNรฅr der udfรธres indsรฆtningshandlinger pรฅ tabeller, vil der vรฆre tidspunkter, hvor visse feltvรฆrdier ikke er tilgรฆngelige.
For at opfylde kravene til รฆgte relationelle databasestyringssystemer, MySQL bruger NULL som pladsholder for de vรฆrdier, der ikke er blevet indsendt. Skรฆrmbilledet nedenfor viser, hvordan NULL-vรฆrdier ser ud i en databasetabel.
Bemรฆrk, at de tomme celler er markeret med NULL, ikke blank tekst og ikke nul. Fรธr vi gรฅr videre, se pรฅ nogle af de grundlรฆggende principper for NULL.
- NULL er ikke en datatype โ dette betyder, at den ikke genkendes som en "int", "dato" eller nogen anden defineret datatype.
- Aritmetiske operationer involverer NULL altid returner NULL, for eksempel 69 + NULL = NULL.
- bro samlede funktioner ignorer rรฆkker, der indeholder NULL-vรฆrdierDen eneste undtagelse er COUNT(*), som tรฆller hver rรฆkke uanset NULL.
Hvordan aggregatfunktioner behandler NULL
Denne regel รฆndrer de svar, som rapporteringsforespรธrgsler returnerer, sรฅ lad os bevise det. Start med det aktuelle indhold af medlemstabellen.
SELECT * FROM `members`;
Udfรธrelse af ovenstรฅende script giver os 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 fremhรฆvede kolonne contact_ number indeholder i alt ni rรฆkker, men to af dem er NULL. Lad os tรฆlle alle medlemmer, der har opdateret deres kontaktnummer.
SELECT COUNT(contact_number) FROM `members`;
Udfรธrelse af ovenstรฅende forespรธrgsel giver os fรธlgende resultater.
| COUNT(contact_number) |
|---|
| 7 |
Bemรฆrk: Svaret er 7 og ikke 9, fordi de to NULL-vรฆrdier ikke blev inkluderet. Hvis COUNT(*) kรธres pรฅ den samme tabel, returneres 9, da COUNT(*) tรฆller rรฆkker i stedet for vรฆrdier.
IKKE NULL-vรฆrdier
En sikrere fremgangsmรฅde er at forhindre NULL i at indtaste obligatoriske kolonner overhovedet. Det er opgaven med NOT NULL-begrรฆnsningen.
Hvad er IKKE-et Operator?
Den logiske operator NOT bruges til at teste boolske betingelser, og den returnerer sand, hvis betingelsen er falsk. NOT-operatoren returnerer falsk, hvis den betingelse, der testes, er sand.
| Betingelse | IKKE Operator Resultat |
|---|---|
| Sand | False |
| False | Sand |
Hvorfor bruge NOT NULL?
Der vil vรฆre tilfรฆlde, hvor vi er nรธdt til at udfรธre beregninger pรฅ et forespรธrgselsresultatsรฆt og returnere vรฆrdierne. Udfรธrelse af enhver aritmetisk operation pรฅ en kolonne, der indeholder en NULL-vรฆrdi, returnerer et NULL-resultat. For at undgรฅ sรฅdanne situationer kan vi bruge NOT NULL-klausulen til at begrรฆnse de resultater, som vores data opererer pรฅ.
Oprettelse af en tabel med en NOT NULL-kolonne
Lad os antage, at vi vil oprette en tabel med bestemte felter, der altid skal forsynes med vรฆrdier, nรฅr der indsรฆttes nye rรฆkker. Vi kan bruge NOT NULL-klausulen pรฅ et givet felt, nรฅr vi opretter tabellen.
Eksemplet nedenfor opretter en ny tabel, der indeholder medarbejderdata. Medarbejdernummeret skal altid angives.
CREATE TABLE `employees`( employee_number int NOT NULL, full_names varchar(255) , gender varchar(6) );
Lad os nu prรธve at indsรฆtte en ny post uden at angive medarbejdernummeret og se, hvad der sker.
INSERT INTO `employees` (full_names,gender) VALUES ('Steve Jobs', 'Male');
Udfรธrelse af ovenstรฅende script i MySQL Workbench giver fรธlgende fejl, fordi den obligatoriske kolonne blev udeladt.
Nรธgleord ER NULL og ER IKKE NULL
Begrรฆnsningen blokerer nye NULL-vรฆrdier. For at arbejde med NULL-vรฆrdier, der allerede findes, bruges NULL som nรธgleord. Syntaksen er som fรธlger.
column_name IS NULL column_name IS NOT NULL
HER
- "ER NULL" er det nรธgleord, der udfรธrer den boolske sammenligning. Den returnerer sand, hvis den angivne vรฆrdi er NULL og falsk, hvis den angivne vรฆrdi ikke er NULL.
- "ER IKKE NULL" er nรธgleordet, der udfรธrer den modsatte sammenligning. Den returnerer sand, hvis den angivne vรฆrdi ikke er NULL, og falsk, hvis den angivne vรฆrdi er NULL.
Lad os se pรฅ et praktisk eksempel, der bruger IS NOT NULL-nรธgleordet til at eliminere alle de rรฆkker, der indeholder NULL-vรฆrdier i en kolonne.
Hvis vi fortsรฆtter med medlemstabellen ovenfor, antager vi, at vi har brug for oplysninger om medlemmer, hvis kontaktnummer ikke er NULL. Vi kan udfรธre en forespรธrgsel som denne.
SELECT * FROM `members` WHERE contact_number IS NOT NULL;
Udfรธrelse af ovenstรฅende forespรธrgsel returnerer kun de syv poster, hvor kontaktnummeret findes, hvilket matcher COUNT-resultatet fra det forrige afsnit.
Antag nu, at vi รธnsker det modsatte: medlemsregistreringerne, hvor kontaktnummeret mangler. Vi kan bruge fรธlgende forespรธrgsel.
SELECT * FROM `members` WHERE contact_number IS NULL;
Udfรธrelse af ovenstรฅende forespรธrgsel giver de to medlemsposter, hvis kontaktnummer er 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 resultatsรฆt, selvom der findes NULL-vรฆrdier. Lighedsoperatoren kan aldrig matche NULL, sรฅ IS NULL er den eneste korrekte test.
Sammenligning af NULL-vรฆrdier med trevรฆrdilogik
Tre-vรฆrdi logik โ udfรธrelse af boolske operationer pรฅ betingelser, der involverer NULL, kan returnere "Ukendt", "Sandt" eller "Falsk".
Brug af nรธgleordet "IS NULL" nรฅr du laver sammenligningsoperationer involverer NULL afkast sand or falskBrug af de andre sammenligningsoperatorer returnerer "Ukendt" (NULL)Tabellen nedenfor sammenligner hvert udtryk side om side.
| Udtryk | Resultat | Betydning |
|---|---|---|
| VรLG 5 = 5; | 1 | TRUE |
| VรLG NULL = NULL; | NULL | UKENDT |
| VรLG 5 > 5; | 0 | FALSK |
| VรLG NULL > NULL; | NULL | UKENDT |
| VรLG 5 ER NULL; | 0 | FALSK |
| VรLG NULL ER NULL; | 1 | TRUE |
Sammenlign tallet fem med sig selv, og gentag derefter operationen med NULL.
SELECT 5 =5; SELECT NULL = NULL;
| 5 =5 | NULL = NULL |
|---|---|
| 1 | NULL |
Det fรธrste resultat er 1 (SAND). Det andet er NULL, fordi MySQL kan ikke angive, at รฉn ukendt vรฆrdi er lig med en anden ukendt vรฆrdi. Brug nu IS NULL-nรธgleordet pรฅ de samme vรฆrdier.
SELECT 5 IS NULL; SELECT NULL IS NULL;
| 5 IS NULL | NULL IS NULL |
|---|---|
| 0 | 1 |
Denne gang er svarene definitive: 0 (FALSK) og 1 (SAND). Kun nรธgleordene IS NULL og IS NOT NULL returnerer et definitivt svar, nรฅr NULL er involveret.


