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.


