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

  • 🧩 Základní definice: NULL je zástupný symbol pro data, která neexistují. Není to datový typ a není to číslo nula.
  • Aritmetické chování: Jakýkoli aritmetický výraz, který obsahuje NULL, vrací NULL, takže 69 + NULL se vyhodnotí jako NULL, nikoli jako 69.
  • 📊 Celkový dopad: Funkce COUNT(column) a další agregační funkce přeskakují řádky s hodnotou NULL, zatímco funkce COUNT(*) stále počítá všechny řádky v tabulce.
  • 🚫 Omezení NOT NULL: Deklarace sloupce s hodnotou NOT NULL odmítne jakékoli vložené položky, které vynechávají hodnotu, což chrání povinná pole, jako jsou identifikátory.
  • 🔍 Správné filtrování: IS NULL a IS NOT NULL jsou jediné spolehlivé testy, protože operátor rovnosti nikdy neodpovídá hodnotě NULL.
  • 🇧🇷 Trojhodnotová logika: Porovnání s hodnotou NULL vrací hodnotu UNKNOWN, takže SELECT NULL = NULL vrátí hodnotu NULL místo TRUE.

MySQL JE NULL a NENÍ NULL

V SQL je NULL zároveň hodnotou i klíčovým slovem. Podívejme se nejprve na hodnotu NULL.

MySQL JE NULL & NENÍ 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.

Null jako hodnota

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

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.

NOT NULL Hodnoty

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

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.

Nejčastější dotazy

Nula je číslo a prázdný řetězec je text, takže oba odpovídají testům rovnosti. NULL znamená, že nebyla zadána žádná hodnota, a proto reaguje pouze na IS NULL a IS NOT NULL.

IFNULL(sloupec, 'N/A') vrací náhradu, kdykoli je sloupec NULL. COALESCE(a, b, c) vrací první argument, který není NULL. Oba jsou užitečné uvnitř MySQL funkce a zprávy.

Ne. MySQL Automaticky aplikuje hodnotu NOT NULL na každý sloupec primárního klíče, protože klíč identifikující řádek nemůže chybět. Index UNIQUE je jiný a povoluje více hodnot NULL.

Obvykle ano. Asistenti umělé inteligence v nástrojích, jako je MySQL Workbench Změňte „členy bez telefonního čísla“ na klauzuli WHERE s hodnotou NULL ve sloupci. Revzobrazit filtr, protože test rovnosti s NULL tiše nevrací nic.

Často ano. Nástroje pro kontrolu umělé inteligence označují chyby, jako například = NULL porovnání, a SELECT který průměruje sloupec obsahující hodnotu NULL a seznamy NOT IN obsahující hodnotu NULL. Konečný úsudek náleží osobě, která data zná.

Shrňte tento příspěvek takto: