NULL (SQL)
Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od
verze recenzované 2. září 2021; kontroly vyžadují
4 úpravy .
NULL v DBMS je speciální hodnota (pseudohodnota), kterou lze zapsat do pole databázové tabulky (DB). NULL odpovídá konceptu "prázdného pole", to znamená "pole, které neobsahuje žádnou hodnotu." Zavedeno za účelem rozlišení mezi prázdnými (nevizuálně zobrazenými) hodnotami v databázových polích (například řetězec nulové délky ) a chybějícími hodnotami (když v poli není zapsána vůbec žádná hodnota, i když je prázdná) .
NULL znamená ne, neznámá informace. Hodnota NULL není hodnotou v plném slova smyslu: podle definice znamená nepřítomnost hodnoty a může být typu NULL nebo jakéhokoli jiného typu (CREATE TABLE new_tab AS (SELECT NULL) je speciální typ null , CREATE TABLE nová_tabulka AS (SELECT 10+NULL) - celočíselný typ). Proto NULL není ani logická hodnota FALSE, ani prázdný řetězec, ani nula. Porovnání NULL s libovolnou hodnotou bude mít za následek NULL, nikoli FALSE nebo 0. Navíc NULL není rovno NULL!
Potřeba NULL v relačních databázích
- Názor 1: Hodnota NULL je nezbytná a povinná pro každou databázi, která tvrdí, že je relační. Zejména bez něj nelze správně sestavit vnější spojení (OUTER JOIN) řádků ze dvou tabulek. Právě tohoto pohledu se E. Codd držel a výslovně jej zahrnul jako třetí z 12 pravidel pro relační DBMS. Tento princip je zakotven v nejnovějších standardech pro jazyk SQL .
- Názor 2: Hodnota NULL není vyžadována a její použití je výsledkem chyby návrhu databáze. V databázi navržené plně v souladu s normalizačními kritérii nemohou být žádná pole bez hodnot, což znamená, že pro taková pole není potřeba speciální pseudohodnota. V praxi je však z důvodu efektivity často vhodné některá normalizační pravidla zanedbávat, ale jednou z nákladů takového zanedbání je výskyt prázdných polí, který je NULL [1] .
Použití NULL v databázi
V databázích, které podporují koncept NULL, se pro pole tabulky v popisu určuje, zda může být prázdné. Pokud ano, pak do tohoto pole nelze zapsat žádnou hodnotu a toto pole bude mít hodnotu NULL. Do takového pole můžete také explicitně zapsat hodnotu NULL.
DBMS obvykle nepovoluje hodnoty NULL pro pole, která jsou součástí primárního klíče tabulky . V polích cizího klíče je naopak povolena hodnota NULL. Přítomnost hodnoty NULL v poli cizího klíče lze interpretovat jako známku nepřítomnosti souvisejícího záznamu a takový cizí klíč nevyžaduje implementaci pravidel referenční integrity , která jsou vyžadována pro jakoukoli jinou hodnotu cizího klíče.
Operace s NULL
Protože NULL není v obecném smyslu hodnota, její použití v aritmetických , string , logických a dalších operacích je přísně vzato nesprávné. Většina DBMS však takové operace podporuje, ale zavádí pro ně zvláštní pravidla:
- NULL lze přiřadit proměnným a zapsat do polí bez ohledu na deklarovaný datový typ těchto proměnných (polí);
- NULL lze předat procedurám a funkcím jako legální hodnotu parametru. Výsledky provádění takové procedury nebo funkce jsou určeny operacemi provedenými s parametry v ní.
- Jakákoli porovnávací operace s NULL (dokonce i operace "NULL = NULL" ) má za následek hodnotu "neznámá" ( UNKNOWN ). Konečný výsledek v tomto případě závisí na úplném logickém vyjádření v souladu s pravdivostní tabulkou logických operací. Pokud je porovnání s NULL celou logickou operací (a není její součástí), pak je její výsledek podobný FALSE (výraz jako IF <něco> = NULL THEN <akce1> ELSE <akce2> END IF vždy povede k provedení akce2 ).
- Agregační a analytické funkce (používané v SQL jako operace se sadami a seznamy ) mají tendenci ignorovat hodnoty NULL ve prospěch platných hodnot pro zbytek prvků sady. Například pro funkci AVG, která je navržena tak, aby nalezla aritmetický průměr libovolného výrazu vyhodnocovaného pro každý řádek ze skupiny, je výsledek stejný, jako kdyby řádky obsahující pro tento výraz NULL nebyly ve skupině vůbec obsaženy.
- Existuje speciální systémová funkce nebo operace (obvykle výraz JE [NOT] NULL), která vrací logickou hodnotu TRUE, pokud výraz je (není) NULL a jinak FALSE.
Kromě toho mohou existovat speciální systémové funkce pro pohodlný převod NULL na určité hodnoty, například Oracle má systémovou funkci NVL, která vrací hodnotu svého parametru, pokud není NULL, nebo výchozí hodnotu, pokud je operand NULL. Standard SQL-92 definuje dvě funkce: NULLIF a COALESCE, takže jejich použití je výhodnější (pokud je konkrétní DBMS implementuje).
Viz také
Poznámky
- ↑ Datum K., Darwen H. Základy budoucích databázových systémů. Třetí manifest. 2. vyd. (za redakce S. D. Kuzněcova). M.: Janus-K, 2004.
SQL |
---|
Verze |
- SQL-86
- SQL-89
- SQL-92
- SQL:1999
- SQL:2003
- SQL:2006
- SQL:2008
- SQL:2011
- SQL:2016
|
---|
Klíčová slova |
|
---|
Související články |
|
---|
Části ISO/IEC SQL |
- Rámec
- Nadace
- Rozhraní úrovně volání
- Trvale uložené moduly
- Správa externích dat
- Vazby objektového jazyka
- Informační a definiční schémata
- Rutiny a typy SQL pro programovací jazyk Java
- Specifikace související s XML
|
---|