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.

I SQL är NULL både ett värde och ett nyckelord. Låt oss först titta på NULL-värdet.
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.
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 | |
|---|---|---|---|---|---|---|---|
| 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 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.
Ä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 | |
|---|---|---|---|---|---|---|---|
| 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.


