8. Pokročilé podmínky výběru
V minulém díle tutoriálu jsme se ukázali vyhledávání v tabulce pomocí základních operátorů. V tomto článku si ukážeme několik dalších operátorů, které nejsou obvyklé pro programovací jazyky ale v SQL mají své nezastupitelné místo. K vyhledávání budeme využívat stejnou tabulku knihy, kterou jsme si vytvořili a naplnili v předchozím článku Základy vyhledávání.Operátor BETWEEN
Slovo Between znamená v angličtině "mezi", a stejnou funkci první v jazyce SQL. Určtuje mezi jakými hodnotami se mají nacházet vybrané výsledky (včetně okrajových zadaných hodnot). V tuto chvíli již patrně některé z vás napadlo, že stejná věc se dá zapsat pomocí operátorů >= AND <= a je tomu skutečně tak. Between nepřináši nic nového, pouze zjednodušuje a zpřehledňuje tento zápis. Podívejme se na příkladu:SELECT *
FROM`knihy`
WHERE `pocet_stran` BETWEEN 200 and 300
A dostáváme:
+----------+-------------+-------------------+-------------------+-------------+ | kniha_id | nazev | isbn | autor | pocet_stran | +----------+-------------+-------------------+-------------------+-------------+ | 10 | Křest ohněm | 978-80-7477-062-3 | Andrzej Sapkowski | 296 | +----------+-------------+-------------------+-------------------+-------------+
Operátor IN
Operátor IN nám umožnuje vyhledat položky, které patři do nějaké výčtu prvků, který uvedeme. To by se opět dalo nahradit varintou s několika OR a = operátory. IN se ale také používá v poddotazech, kde by to již tak snadno nahradit nešlo. O těch si později povíme v samostatném článku tutoriálu. Nyní si zkusme vyhledat knihy, které podle názvu patří do naší množiny:SELECT *
FROM `knihy`
WHERE `nazev` in ('Duna', 'Kmotr', '1984', 'Pán prstenů');
Jako výsledky dostaneme 3 knihy, odpovídající záznám pro Pána prstenů v naší tabulce nemáme:
+----------+-------+-------------------+---------------+-------------+ | kniha_id | nazev | isbn | autor | pocet_stran | +----------+-------+-------------------+---------------+-------------+ | 1 | Duna | 978-80-269-0517-2 | Frank Herbert | 592 | | 4 | Kmotr | 978-80-242-5899-7 | Mario Puzo | 496 | | 7 | 1984 | 978-80-257-1479-9 | George Orwell | 320 | +----------+-------+-------------------+---------------+-------------+
Operátor LIKE
Jako poslední nám zbyl operátor LIKE, který je nejkomplikovanější, ale také velmi často nenahraditelný. Operátor LIKE nám umožnuje porovnávat text na základě shody nějaké podčásti textu. Toho docílíme používáním 2 zástupných znaků:% - znak procenta - nahrazuje libovolný (i nulový) počet znaků
_ - znak podtržítko - nahrazuje právě jeden znak
Pomocí těchto dvou zástupných znaků tak můžeme vytvořit určitý "vzor", kterému mají vybrané řádky tabulky odpovídat. Oba znaky můžeme kombinovat a libovolně opakovat. Zkusme si najít všechny knihy od autora s křestním jménem George:
SELECT *
FROM `knihy`
WHERE `autor` LIKE 'George%'
Čímž dostaneme tyto dvě knihy:
+----------+------------+-------------------+---------------------+-------------+ | kniha_id | nazev | isbn | autor | pocet_stran | +----------+------------+-------------------+---------------------+-------------+ | 6 | Bouře mečů | 978-80-257-2419-4 | George R. R. Martin | 1132 | | 7 | 1984 | 978-80-257-1479-9 | George Orwell | 320 | +----------+------------+-------------------+---------------------+-------------+
Zkusme si ještě příklad na _. Pomocí toho můžeme stanovit konkrétní počet znaků. Zkusíme vyhledat knihy, které začínají na písmeno D a název má alespoň 5 znaků:
SELECT *
FROM `knihy`
WHERE `nazev` like 'D____%';
Tento dotaz nám vrátí:
+----------+----------------+-------------------+-----------+-------------+ | kniha_id | nazev | isbn | autor | pocet_stran | +----------+----------------+-------------------+-----------+-------------+ | 5 | Dva proti říši | 978-80-242-5975-8 | Jiří Šulc | 480 | +----------+----------------+-------------------+-----------+-------------+
Což je jediná skutečně správně odpovídající kniha. Vzor "'D____%" nám říká První písmeno je "D", poté následuje 4x jakýkoliv znak a poté již zcela cokoliv (i nic).
S pomocí LIKE můžete vytvořit mnoho užitečných dotazů. Nejčastěji se používá pro různá vyhledávání v textech, názvech nebo třeba jménech (hledaný výraz z obou stran obalený %).
Tímto článkem jsme uzavřeli vyhledávaci operátory a příště se podíváme na rozsáhlé téma spojování více tabulek.
Další díly tutoriálu
6. Základy - co se jinam nevešlo7. Základy vyhledávání
8. Pokročilé podmínky výběru
9. Spojování více tabulek - základy
10. Spojování více tabulek - pokročilé