MySQL ÄR NULL och ÄR INTE NULL med exempel

⚡ Smart sammanfattning

MySQL IS NULL och IS NOT NULL är jämförelsenyckelord som testar om en kolumn innehåller ett saknat värde. NULL markerar frånvarande data, beter sig annorlunda än noll eller en tom sträng och kräver dedikerade operatorer för tillförlitlig filtrering.

  • 🧩 Kärndefinition: NULL är en platshållare för data som inte existerar. Det är inte en datatyp och det är inte talet noll.
  • Aritmetiskt beteende: Alla aritmetiska uttryck som involverar NULL returnerar NULL, så 69 + NULL utvärderas till NULL snarare än 69.
  • 📊 Aggregerad påverkan: COUNT(kolumn) och andra aggregeringsfunktioner hoppar över NULL-rader, medan COUNT(*) fortfarande räknar varje rad i tabellen.
  • ???? INTE NULL-begränsning: Att deklarera en kolumn NOT NULL avvisar alla infogning som utelämnar ett värde, vilket skyddar obligatoriska fält som identifierare.
  • 🔍 Korrekt filtrering: IS NULL och IS NOT NULL är de enda tillförlitliga testerna, eftersom likhetsoperatorn aldrig matchar ett NULL-värde.
  • ⚖️ Trevärdig logik: Jämförelser mot NULL returnerar UNKNOWN, så SELECT NULL = NULL producerar NULL istället för TRUE.

MySQL ÄR NULL och ÄR INTE NULL

I SQL är NULL både ett värde och ett nyckelord. Låt oss först titta på NULL-värdet.

MySQL ÄR NULL & ÄR INTE NULL

Vad är NULL i MySQL?

I enkla termer, NULL är en platshållare för data som inte existerarNär man infogar tabeller kan det hända att vissa fältvärden inte är tillgängliga.

För att uppfylla kraven för äkta relationsdatabashanteringssystem, MySQL använder NULL som platshållare för de värden som inte har skickats. Skärmdumpen nedan visar hur NULL-värden ser ut i en databastabell.

Null som värde

Observera att de tomma cellerna är markerade med NULL, inte tom text och inte noll. Innan vi går vidare, titta på några av grunderna i NULL.

  • NULL är inte en datatyp – detta betyder att den inte känns igen som en "int", "datum" eller någon annan definierad datatyp.
  • Aritmetiska operationer involverar NULL alltid returnera NULL, till exempel, 69 + NULL = NULL.
  • bro aggregerade funktioner ignorera rader som innehåller NULL-värdenDet enda undantaget är COUNT(*), som räknar varje rad oavsett NULL.

Hur aggregerade funktioner behandlar NULL

Den här regeln ändrar svaren som rapporteringsfrågor returnerar, så låt oss bevisa det. Börja med det aktuella innehållet i medlemstabellen.

SELECT * FROM `members`;

Att köra skriptet ovan ger oss följande resultat.

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 markerade kolumnen contact_ number innehåller totalt nio rader, men två av dem är NULL. Låt oss räkna alla medlemmar som har uppdaterat sitt kontaktnummer.

SELECT COUNT(contact_number) FROM `members`;

Att köra ovanstående fråga ger oss följande resultat.

COUNT(contact_number)
7

Obs: Svaret är 7 och inte 9, eftersom de två NULL-värdena inte inkluderades. Att köra COUNT(*) på samma tabell skulle returnera 9, eftersom COUNT(*) räknar rader snarare än värden.

INTE NULL-värden

En säkrare metod är att hindra NULL från att komma in i obligatoriska kolumner överhuvudtaget. Det är uppgiften för NOT NULL-begränsningen.

Vad är INTE Operator?

Den logiska operatorn NOT används för att testa booleska villkor och returnerar sant om villkoret är falskt. Operatorn NOT returnerar falskt om det testade villkoret är sant.

Skick INTE Operator Resultat
Sant Falsk
Falsk Sant

Varför använda NOT NULL?

Det kommer att finnas fall då vi måste utföra beräkningar på en frågeresultatmängd och returnera värdena. Att utföra en aritmetisk operation på en kolumn som innehåller ett NULL-värde returnerar ett NULL-resultat. För att undvika sådana situationer kan vi använda NOT NULL-klausulen för att begränsa de resultat som våra data baseras på.

Skapa en tabell med en NOT NULL-kolumn

Låt oss anta att vi vill skapa en tabell med vissa fält som alltid ska förses med värden när nya rader infogas. Vi kan använda NOT NULL-klausulen på ett givet fält när vi skapar tabellen.

Exemplet nedan skapar en ny tabell som innehåller medarbetardata. Medarbetarnumret ska alltid anges.

CREATE TABLE `employees`(
  employee_number int NOT NULL,
  full_names varchar(255) ,
  gender varchar(6)
);

Låt oss nu försöka infoga en ny post utan att ange anställningsnumret och se vad som händer.

INSERT INTO `employees` (full_names,gender) VALUES ('Steve Jobs', 'Male');

Exekvera skriptet ovan i MySQL Arbetsbänk ger följande felmeddelande eftersom den obligatoriska kolumnen utelämnades.

INTE NULL-värden

ÄR NULL och ÄR INTE NULL Nyckelord

Begränsningen blockerar nya NULL-värden. För att arbeta med NULL-värden som redan finns används NULL som nyckelord. Syntaxen är följande.

column_name IS NULL
column_name IS NOT NULL

HÄR

  • "ÄR INGET" är nyckelordet som utför den booleska jämförelsen. Det returnerar sant om det angivna värdet är NULL och false om det angivna värdet inte är NULL.
  • "ÄR INTE NULL" är nyckelordet som utför den motsatta jämförelsen. Den returnerar sant om det angivna värdet inte är NULL och falskt om det angivna värdet är NULL.

Låt oss titta på ett praktiskt exempel som använder nyckelordet IS NOT NULL för att eliminera alla rader som innehåller NULL-värden i en kolumn.

Om vi ​​fortsätter med medlemstabellen ovan, anta att vi behöver information om medlemmar vars kontaktnummer inte är NULL. Vi kan köra en fråga som denna.

SELECT * FROM `members` WHERE contact_number IS NOT NULL;

Om du kör frågan ovan returneras endast de sju poster där kontaktnumret finns, vilket matchar COUNT-resultatet från föregående avsnitt.

Anta nu att vi vill ha det motsatta: medlemsposterna där kontaktnumret saknas. Vi kan använda följande fråga.

SELECT * FROM `members` WHERE contact_number IS NULL;

Genom att köra ovanstående fråga får du de två medlemsposterna vars kontaktnummer är 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

Varning: Ett villkor som WHERE contact_number = NULL returnerar en tom resultatmängd, även om NULL-värden finns. Likhetsoperatorn kan aldrig matcha NULL, så IS NULL är det enda korrekta testet.

Jämförelse av NULL-värden med trevärdig logik

Trevärdeslogik – att utföra booleska operationer på villkor som involverar NULL kan returnera "Okänd", "Sant" eller "Falskt".

Använda nyckelordet "IS NULL" när man gör jämförelseoperationer involverar NULL återgår sann or falskGenom att använda de andra jämförelseoperatorerna returnerar "Okänd" (NULL)Tabellen nedan jämför varje uttryck sida vid sida.

Uttryck Resultat Betydelse
VÄLJ 5 = 5; 1 SANN
VÄLJ NULL = NULL; NULL OKÄND
VÄLJ 5 > 5; 0 FALSK
VÄLJ NULL > NULL; NULL OKÄND
VÄLJ 5 ÄR NULL; 0 FALSK
VÄLJ NULL ÄR NULL; 1 SANN

Jämför talet fem med sig självt och upprepa sedan operationen med NULL.

SELECT 5 =5;
SELECT NULL = NULL;
5 =5 NULL = NULL
1 NULL

Det första resultatet är 1 (SANT). Det andra är NULL, eftersom MySQL kan inte ange att ett okänt värde är lika med ett annat okänt värde. Använd nu nyckelordet IS NULL på samma värden.

SELECT 5 IS NULL;
SELECT NULL IS NULL;
5 IS NULL NULL IS NULL
0 1

Den här gången är svaren definitiva: 0 (FALSKT) och 1 (SANT). Endast nyckelorden IS NULL och IS NOT NULL returnerar ett definitivt svar när NULL är inblandat.

Vanliga frågor

Noll är ett tal och en tom sträng är text, så båda matchar likhetstester. NULL betyder att inget värde angavs alls, vilket är anledningen till att den bara svarar på IS NULL och IS NOT NULL.

IFNULL(kolumn, 'N/A') returnerar ersättningen när kolumnen är NULL. COALESCE(a, b, c) returnerar det första argumentet som inte är NULL. Båda är användbara inuti MySQL funktioner och rapporter.

Nej. MySQL tillämpar NOT NULL automatiskt på varje primärnyckelkolumn, eftersom en nyckel som identifierar en rad inte kan saknas. Ett UNIQUE-index är annorlunda och tillåter flera NULL-värden.

Vanligtvis, ja. AI-assistenter inuti verktyg som MySQL Arbetsbänk omvandla "medlemmar utan telefonnummer" till en WHERE-kolumnen IS NULL-klausul. Revvisa filtret, eftersom ett likhetstest mot NULL tyst returnerar ingenting.

Ofta, ja. AI-granskningsverktyg flaggar fel som = NULL-jämförelser, a VÄLJA som medelvärdesbildar en kolumn som innehåller NULL, och NOT IN-listor som innehåller NULL. Den slutgiltiga bedömningen tillhör den person som känner till informationen.

Sammanfatta detta inlägg med: