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: