19.12.2012, Vladimír Klaus, navštíveno 6523x
Pomocí tohoto predikátu můžete pracovat s hodnotou, která neexistuje – nebyla vyplněna. Ona to tedy vlastně ani není hodnota, o čemž se dozvíte v části Co to je NULL.
Zkusme si třeba zjistit, zda máme nějaké zákazníky, kteří zapomněli vyplnit příjmení.
SELECT * FROM Zakaznici WHERE Prijmeni IS NULL
Ale ano, jeden zákazník tu opravdu je…
Alternativou k výše uvedenému dotazu je tento, využívající funkci IsNull().
SELECT * FROM Zakaznici WHERE IsNull(Prijmeni)
Tento predikát můžeme dále kombinovat s klíčovým slovem NOT, tedy dostaneme opačný výsledek. Tato zjistíme objednávky, které mají vyplněné datum a zároveň jsou vyřízené.
SELECT * FROM Objednavky
WHERE Datum IS NOT NULL AND Vyrizeno = True
Všimněte si prosím, že ve výše uvedeném příkladu nemůžeme použít podmínku, ve které by se porovnávalo datum s prázdným řetězcem! Datum není textový řetězec a test na to, zda je vyplněno se takto realizovat opravdu nedá.
SELECT * FROM Objednavky WHERE Datum<>""
A nakonec ještě dokonalejší a trochu složitější dotaz – objednávky, které mají vyplněné datum a jsou od zákazníků, kteří mají vyplněná příjmení.
SELECT * FROM Objednavky
INNER JOIN Zakaznici
ON Objednavky.IdZakaznika = Zakaznici.ID
WHERE Objednavky.Datum IS NOT NULL AND Zakaznici.Prijmeni IS NOT NULL
Upozornění: Je třeba dávat velký pozor na práci s těmito hodnotami, protože v některých případech se vůbec nedají použít (například spojovat podle toho tabulky), jindy nám zcela znehodnotí dotaz, který vrátí více či méně nesmyslné výsledky apod.
Rozdíl mezi neexistující a prázdnou hodnotou
Další nebezpečí číhá v tom, že nevyplněná hodnota není (nemusí být) totéž jako hodnota, která byla vyplněna, ale byla smazána. Taková hodnota je pak prázdná.
Jak si toto představit v nějakém reálném příkladu? Je to stejné, jako byste měli založený bankovní účet a na něm nic neměli (hodnota je prázdná). To ale stále umožňuje na tento účet nějaké peníze poslat. Ale ve chvíli, kdy účet vůbec neexistuje, je z tohoto pohledu situace zcela odlišná (peníze není kam poslat).
Je zřejmé, že v praxi není často vůbec důležité, zda hodnota neexistuje (nikdy nebyla zadána) nebo byla jen vymazána (a je prázdná). Vždy si ověřte, že váš dotaz funguje z tohoto pohledu zcela transparentně.