Prázdná hodnota NULL


Zavedením prázdné hodnoty NULL si celou situaci trochu zkomplikujeme. Především se musí změnit sémantika vyhodnocování logických podmínek. Kromě hodnot TRUE a FALSE musíme uvažovat i hodnotu UNKNOWN a přejít tedy na tříhodnotovou logiku. Ukažme si to na několika příkladech. Pro lepší představu nebudu v následujících dotazech uvádět v podmínce WHERE sloupec, ale vždy konkrétní hodnotu označenou červeně. Zároveň bude uveden výsledek dotazu a pravdivostní hodnota podmínky v klauzuli WHERE.

SQL> select count(*) from dual where 1 = 1;

  COUNT(*)
----------
	 1    TRUE

SQL> select count(*) from dual where 0 = 1;

  COUNT(*)
----------
	 0    FALSE

SQL> 
SQL> select count(*) from dual where null = 1;

  COUNT(*)
----------
	 0    UNKNOWN

SQL> select count(*) from dual where null != 1;

  COUNT(*)
----------
	 0    UNKNOWN

SQL> 
SQL> select count(*) from dual where null is null;

  COUNT(*)
----------
	 1    TRUE

SQL> select count(*) from dual where null is not null;

  COUNT(*)
----------
	 0    FALSE

SQL> 
SQL> select count(*) from dual where 1 in (1, 2, 3);

  COUNT(*)
----------
	 1    TRUE

SQL> select count(*) from dual where 4 in (1, 2, 3);

  COUNT(*)
----------
	 0    FALSE

SQL> 
SQL> select count(*) from dual where null not in (1, 2, 3);

  COUNT(*)
----------
	 0    UNKNOWN

SQL> 
select count(*) from dual where null not in (1, 2, 3) or null is null;

  COUNT(*)
----------
	 1    TRUE

SQL>
ABA and BA or Bnot A
TrueTrueTrueTrueFalse
TrueFalseFalseTrueFalse
TrueUnknownUnknownTrueFalse
FalseTrueFalseTrueTrue
FalseFalseFalseFalseTrue
FalseUnknownFalseUnknownTrue
UnknownTrueUnknownTrueUnknown
UnknownFalseFalseUnknownUnknown
UnknownUnknownUnknownUnknownUnknown

ID osobyID nadřízenéhoPříjmeníJménoČíslo karty
1nullDudacekVlastimil1
21VavrickaKarel4
31HeroutStanislav5
42RohlikMaxmilian6
52PesickaOndrej7
62BokrPavel8
73DuraAntoninnull

SQL> select count(*) from osoby;

  COUNT(*)
----------
	 7
SQL> select count(id_nad) from osoby;

COUNT(ID_NAD)
-------------
	    6

SQL> select count(*) from osoby where id_nad is not null;

  COUNT(*)
----------
	 6
SQL> select count(*) from osoby where id_nad is null;

  COUNT(*)
----------
	 1

SQL> select count(*) from osoby where id_nad != 1;

  COUNT(*)
----------
	 4
SQL> select count(*) from osoby where id_nad != 1 or id_nad is null;

  COUNT(*)
----------
	 5