MySQL IS NULL a IS NOT NULL s příklady
⚡ Chytré shrnutí
MySQL IS NULL a IS NOT NULL jsou porovnávací klíčová slova, která testují, zda sloupec obsahuje chybějící hodnotu. NULL označuje chybějící data, chová se odlišně od nuly nebo prázdného řetězce a vyžaduje specializované operátory pro spolehlivé filtrování.

V SQL je NULL zároveň hodnotou i klíčovým slovem. Podívejme se nejprve na hodnotu NULL.
Co je NULL v MySQL?
Zjednodušeně řečeno, NULL je zástupný symbol pro data, která neexistují.Při provádění operací vkládání v tabulkách se mohou vyskytnout situace, kdy některé hodnoty polí nebudou k dispozici.
Aby byly splněny požadavky skutečných systémů pro správu relačních databází, MySQL používá NULL jako zástupný symbol pro hodnoty, které nebyly odeslány. Následující snímek obrazovky ukazuje, jak hodnoty NULL vypadají v databázové tabulce.
Všimněte si, že prázdné buňky jsou označeny NULL, nikoli prázdným textem a ne nulou. Než budeme pokračovat, podívejme se na některé základy funkce NULL.
- NULL není datový typ – to znamená, že není rozpoznán jako „int“, „date“ nebo jiný definovaný datový typ.
- Aritmetické operace zahrnující NULL vždy vrátit NULLnapříklad 69 + NULL = NULL.
- Většina agregační funkce ignorovat řádky, které obsahují hodnoty NULLJedinou výjimkou je COUNT(*), která počítá všechny řádky bez ohledu na hodnotu NULL.
Jak agregační funkce zacházejí s hodnotou NULL
Toto pravidlo mění odpovědi, které dotazy na vytváření sestav vracejí, takže si to pojďme dokázet. Začněme s aktuálním obsahem tabulky members.
SELECT * FROM `members`;
Spuštění výše uvedeného skriptu nám poskytne následující výsledky.
| 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 |
Zvýrazněný sloupec contact_number obsahuje celkem devět řádků, ale dva z nich mají hodnotu NULL. Spočítejme všechny členy, kteří aktualizovali své kontaktní číslo.
SELECT COUNT(contact_number) FROM `members`;
Provedení výše uvedeného dotazu nám poskytne následující výsledky.
| COUNT(contact_number) |
|---|
| 7 |
Poznámka: Výsledek je 7 a ne 9, protože nebyly zahrnuty dvě hodnoty NULL. Spuštění funkce COUNT(*) na stejné tabulce by vrátilo 9, protože COUNT(*) počítá řádky, nikoli hodnoty.
NOT NULL Hodnoty
Bezpečnější přístup je zabránit proměnné NULL v zadávání povinných sloupců. To je úkolem omezení NOT NULL.
Co je NE Operator?
Logický operátor NOT se používá k testování booleovských podmínek a vrací hodnotu true, pokud je podmínka nepravdivá. Operátor NOT vrací hodnotu false, pokud je testovaná podmínka pravdivá.
| Stav | NENÍ Operator Výsledek |
|---|---|
| Pravdivý | Falešný |
| Falešný | Pravdivý |
Proč používat NOT NULL?
Budou nastávat případy, kdy budeme muset provádět výpočty s výslednou sadou dotazů a vracet hodnoty. Provedení jakékoli aritmetické operace se sloupcem, který obsahuje hodnotu NULL, vrátí výsledek NULL. Abychom se těmto situacím vyhnuli, můžeme použít klauzuli NOT NULL k omezení výsledků, se kterými naše data operují.
Vytvoření tabulky se sloupcem typu NOT NULL
Předpokládejme, že chceme vytvořit tabulku s určitými poli, která by měla být vždy opatřena hodnotami při vkládání nových řádků. Při vytváření tabulky můžeme na dané pole použít klauzuli NOT NULL.
Níže uvedený příklad vytvoří novou tabulku, která obsahuje data o zaměstnancích. Číslo zaměstnance by mělo být vždy uvedeno.
CREATE TABLE `employees`( employee_number int NOT NULL, full_names varchar(255) , gender varchar(6) );
Zkusme nyní vložit nový záznam bez zadání čísla zaměstnance a uvidíme, co se stane.
INSERT INTO `employees` (full_names,gender) VALUES ('Steve Jobs', 'Male');
Spuštění výše uvedeného skriptu v MySQL Workbench vrací následující chybu, protože byl vynechán povinný sloupec.
Klíčová slova IS NULL a IS NOT NULL
Toto omezení blokuje nové hodnoty NULL. Pro práci s hodnotami NULL, které již existují, se jako klíčové slovo používá NULL. Syntaxe je následující.
column_name IS NULL column_name IS NOT NULL
ZDE
- „JE NULL“ je klíčové slovo, které provádí booleovské porovnání. Vrací hodnotu true, pokud je zadaná hodnota NULL, a hodnotu false, pokud zadaná hodnota není NULL.
- „NENÍ NULL“ je klíčové slovo, které provádí opačné porovnání. Vrací hodnotu true, pokud zadaná hodnota není NULL, a hodnotu false, pokud zadaná hodnota je NULL.
Podívejme se na praktický příklad, který používá klíčové slovo IS NOT NULL k odstranění všech řádků obsahujících hodnoty NULL ve sloupci.
Pokračujeme-li s výše uvedenou tabulkou členů, předpokládejme, že potřebujeme údaje o členech, jejichž kontaktní číslo není NULL. Můžeme spustit dotaz podobný tomuto.
SELECT * FROM `members` WHERE contact_number IS NOT NULL;
Spuštění výše uvedeného dotazu vrátí pouze sedm záznamů, ve kterých se nachází kontaktní číslo, což odpovídá výsledku COUNT z předchozí části.
Nyní předpokládejme, že chceme opak: záznamy o členech, kde chybí kontaktní číslo. Můžeme použít následující dotaz.
SELECT * FROM `members` WHERE contact_number IS NULL;
Spuštěním výše uvedeného dotazu získáte dva záznamy členů, jejichž kontaktní číslo je 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 |
Varování: Podmínka jako WHERE contact_number = NULL vrací prázdnou sadu výsledků, i když existují hodnoty NULL. Operátor rovnosti se nikdy nemůže shodovat s hodnotou NULL, takže jediným správným testem je IS NULL.
Porovnávání hodnot NULL pomocí tříhodnotové logiky
Trojhodnotová logika – provádění booleovských operací s podmínkami, které zahrnují NULL, může vrátit hodnotu „Neznámé“, „Pravda“ nebo „Nepravda“.
Použití klíčového slova „IS NULL“ při provádění srovnávacích operací zahrnující NULL Vrací pravdivý or nepravdivýPoužití ostatních porovnávacích operátorů vrací „Neznámý“ (NULL)Níže uvedená tabulka porovnává jednotlivé výrazy vedle sebe.
| Výraz | Výsledek | Význam |
|---|---|---|
| VYBRAT 5 = 5; | 1 | TRUE |
| VYBRAT NULL = NULL; | NULL | NEZNÁMÝ |
| VYBERTE 5 > 5; | 0 | NEPRAVDIVÉ |
| VYBRAT NULL > NULL; | NULL | NEZNÁMÝ |
| VYBRAT 5 JE NULL; | 0 | NEPRAVDIVÉ |
| VYBRAT NULL JE NULL; | 1 | TRUE |
Porovnejte číslo pět samo se sebou a poté operaci zopakujte s NULL.
SELECT 5 =5; SELECT NULL = NULL;
| 5 =5 | NULL = NULL |
|---|---|
| 1 | NULL |
První výsledek je 1 (TRUE). Druhý je NULL, protože MySQL Nelze říci, že jedna neznámá hodnota se rovná jiné neznámé hodnotě. Nyní použijte klíčové slovo IS NULL na stejné hodnoty.
SELECT 5 IS NULL; SELECT NULL IS NULL;
| 5 IS NULL | NULL IS NULL |
|---|---|
| 0 | 1 |
Tentokrát jsou odpovědi určité: 0 (NEPRAVDA) a 1 (PRAVDA). Pouze klíčová slova IS NULL a IS NOT NULL vracejí určitou odpověď, pokud je použita hodnota NULL.


