Tvorba dotazů s podmínkami v MySQL

Opět se budeme věnovat vypisování dat z databáze na základě určených kritérií. Tento článek volně navazuje na předchozí tutoriál, který se zabýval shodným tématem. Jak již se stalo zvykem, i nyní si představíme, že disponujeme daty o zaměstnancích a potřebujeme získat určité podrobnosti týkající se nejen vnitřních procesů firmy.

Porovnávací operátory

Velmi častou součást dotazů představuje vymezení nejrůznějších podmínek. Minule jsem si ukázali, jak pracovat se základními operátory. Vytvoření intervalu nám umožnily znaky > (větší) a < (menší). Kýženého efektu však nyní dosáhneme použitím BETWEEN . Zobrazíme si jména zaměstnanců s platem mezi 15-ti a 20-ti tisíci korunami včetně krajních hodnot. Normálně bychom museli využít služeb operátorů >= a <=. Pakliže si však nemůžete zapamatovat, že matematický symbol rovná se patří až na druhé místo, začněte preferovat nespornou výhodu zakomponování BETWEEEN.

SELECT jmeno, prijmeni FROM zamestnanci WHERE plat BETWEEN 15000 AND 20000;

Obdobně lze rovněž přidáním negace zrealizovat dotaz, který naopak vypíše osoby s platem mimo určený rozsah:

SELECT jmeno, prijmeni FROM zamestnanci WHERE plat NOT BETWEEN 15000 AND 20000;

Nyní přichází na řadu velmi užitečná pomůcka, která dokáže ušetřit mnoho drahocenného času. Pakliže určité pole v tabulce smí odpovídat jen několika málo hodnotám, nemusíte vždy dotaz zbytečně prodlužovat o podmínky spojené logickým součtem (OR). Jak vidíte, první zápis lze velmi snadno zjednodušit.

SELECT jmeno, prijmeni FROM zamestnanci WHERE plat = 15000 OR plat = 20000 OR plat = 25000;

SELECT jmeno, prijmeni FROM zamestnanci WHERE plat IN(15000,20000,25000);

Oba uvedené dotazy způsobí zobrazení shodných záznamů. Druhá forma specifikování podmínky je však na první pohled mnohem lépe čitelná. Jistě vás napadá, že i v tomto případě nebude negace ničím složitým. Opět postačí vložit NOT na správné místo.

SELECT jmeno, prijmeni FROM zamestnanci WHERE plat NOT IN(15000,20000,25000);

Práce s NULL

Víte, jakou hodnotu naleznete v databázi u položky, která nemá určité pole vyplněno? Jde právě o NULL. Díky tomu dokážeme pohodlně identifikovat částečně vyplněné záznamy. Tomuto problému lze předejít striktním vyžadováním zápisu veškerých možných informací. Ve specifických případech se však tato idea obtížně naplňuje. Představme si například, že budeme po zaměstnancích vyžadovat dvě telefonní čísla. Co když někdo disponuje jen jedním?

SELECT jmeno, prijmeni FROM zamestnanci WHERE zalozni_tel IS NULL;

Během případné aktualizace osobních údajů zaměstnanců si poté jen stačí zobrazit neuvedené údaje. Opačný efekt nám zajistí opět negace. Takto získáme seznam osob, které uvedly obě telefonní čísla:

SELECT jmeno, prijmeni FROM zamestnanci WHERE zalozni_tel IS NOT NULL;

O Ondřej Směták

Student, který se intenzivně zajímá o oblast IT a to především z pohledu webmastera a programátora GUI aplikací.