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.

  • ๐Ÿงฉ Kjernedefinisjon: NULL er en plassholder for data som ikke finnes. Det er ikke en datatype, og det er ikke tallet null.
  • โž— Aritmetisk oppfรธrsel: Ethvert aritmetisk uttrykk som involverer NULL returnerer NULL, sรฅ 69 + NULL evalueres til NULL i stedet for 69.
  • ๐Ÿ“Š Samlet innvirkning: COUNT(kolonne) og andre aggregerte funksjoner hopper over NULL-rader, mens COUNT(*) fortsatt teller hver rad i tabellen.
  • ๐Ÿšซ IKKE NULL-begrensning: Hvis du deklarerer en kolonne som NOT NULL, avvises alle innsettinger som utelater en verdi, noe som beskytter obligatoriske felt som identifikatorer.
  • ๐Ÿ” Riktig filtrering: IS NULL og IS NOT NULL er de eneste pรฅlitelige testene, fordi likhetsoperatoren aldri samsvarer med en NULL-verdi.
  • ๐Ÿ‡ง๐Ÿ‡ท Treverdig logikk: Sammenligninger mot NULL returnerer UNKNOWN, sรฅ SELECT NULL = NULL produserer NULL i stedet for TRUE.

MySQL ER NULL og ER IKKE NULL

I SQL er NULL bรฅde en verdi og et nรธkkelord. La oss fรธrst se pรฅ NULL-verdien.

MySQL ER NULL & ER IKKE NULL

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.

Null som en verdi

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

IKKE NULL-verdier

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

Spรธrsmรฅl og svar

Null er et tall og en tom streng er tekst, sรฅ begge samsvarer med likhetstester. NULL betyr at ingen verdi ble oppgitt i det hele tatt, og det er derfor den bare 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 argumentet som ikke er NULL. Begge er nyttige i MySQL funksjoner og rapporter.

Nei. MySQL bruker NOT NULL automatisk pรฅ hver primรฆrnรธkkelkolonne, fordi en nรธkkel som identifiserer en rad ikke kan mangle. En UNIK indeks er annerledes og tillater flere NULL-verdier.

Vanligvis ja. AI-assistenter i verktรธy som MySQL Workbench Gjรธr om ยซmedlemmer uten telefonnummerยป til en WHERE-kolonnen IS NULL-klausul. RevSe filteret, fordi en likhetstest mot NULL returnerer ingenting i stillhet.

Ofte, ja. AI-gjennomgangsverktรธy flagger feil som = NULL-sammenligninger, en VELG som gjennomsnittsberegner en kolonne som inneholder NULL, og NOT IN-lister som inneholder NULL. Den endelige vurderingen ligger hos personen som kjenner dataene.

Oppsummer dette innlegget med: