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.

  • 🧩 Kernedefinition: NULL er en pladsholder for data, der ikke findes. Det er ikke en datatype, og det er ikke tallet nul.
  • ➗ Aritmetisk adfærd: Ethvert aritmetisk udtryk, der involverer NULL, returnerer NULL, så 69 + NULL evalueres til NULL i stedet for 69.
  • 📊 Samlet påvirkning: COUNT(kolonne) og andre aggregeringsfunktioner springer NULL-rækker over, mens COUNT(*) stadig tæller alle rækker i tabellen.
  • 🚫 IKKE NULL-begrænsning: Deklarering af en kolonne NOT NULL afviser enhver indsættelse, der udelader en værdi, hvilket beskytter obligatoriske felter såsom identifikatorer.
  • 🔍 Korrekt filtrering: IS NULL og IS NOT NULL er de eneste pålidelige tests, fordi lighedsoperatoren aldrig matcher en NULL-værdi.
  • ⚖️ Treværdilogik: Sammenligninger med NULL returnerer UNKNOWN, så SELECT NULL = NULL producerer NULL i stedet for TRUE.

MySQL ER NULL og ER IKKE NULL

I SQL er NULL både en værdi og et nøgleord. Lad os først se på NULL-værdien.

MySQL ER NULL & ER IKKE NULL

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.

Nul som værdi

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 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

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.

IKKE NULL-værdier

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 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

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.

Ofte Stillede Spørgsmål

Nul er et tal, og en tom streng er tekst, så begge matcher lighedstests. NULL betyder, at der slet ikke blev angivet nogen værdi, hvilket er grunden til, at den kun reagerer på IS NULL og IS NOT NULL.

HVIS NULL(kolonne, 'N/A') returnerer erstatningen, når kolonnen er NULL. COALESCE(a, b, c) returnerer det første argument, der ikke er NULL. Begge er nyttige indeni MySQL funktioner og rapporter.

Nej. MySQL anvender automatisk NOT NULL på hver primærnøglekolonne, fordi en nøgle, der identificerer en række, ikke kan mangle. Et UNIQUE-indeks er anderledes og tillader flere NULL-værdier.

Normalt ja. AI-assistenter i værktøjer som f.eks. MySQL Workbench Lav "medlemmer uden telefonnummer" om til en WHERE-kolonne IS NULL-klausul. RevSe filteret, fordi en lighedstest mod NULL ikke returnerer noget lydløst.

Ofte, ja. AI-gennemgangsværktøjer markerer fejl såsom = NULL-sammenligninger, en SELECT der gennemsnittet af en kolonne, der indeholder NULL, og NOT IN-lister, der indeholder NULL. Den endelige vurdering tilhører den person, der kender dataene.

Opsummer dette indlæg med: