![]() |
1. CVIČENÍ |
SELECT [DISTINCT|ALL] {*|[sloupec_vyraz [AS nove_jmeno] [,...]} FROM tabulka [alias] [,...] [WHERE podminka] [GROUP BY seznam_sl] [HAVING podminka] [ORDER BY seznam_sl]
Během práce s databází snadno zapomenete jakou měla vaše tabulka vlastně strukturu a jaké tabulky jste si v databázi vytvořili. Takže nejprve několik základních dovedností :
SELECT * FROM user_catalog;
DESC jmeno_tabulky
Výběr z tabulky :
SELECT * FROM cd;
Výběr určitých sloupců (projekce) :
SELECT interpret, titul FROM cd; SELECT pisen, d_min, d_sec FROM cd; SELECT interpret FROM cd;
Výběr s eliminací redundantních řádků :
SELECT DISTINCT interpret FROM cd;Pozn.: klauzule ALL slouží k výběru všech řádků včetně redundancí. Tento výběr je předpokládán implicitně, proto se ALL nemusí používat. Po pravdě řečeno - mnoho RDBMS jej ani nezná.
Výběr s odvozeným sloupcem (výrazem) :
SELECT pisen, d_min * 60 + d_sec FROM cd;
Pojmenování odvozeného sloupce :
SELECT pisen, d_min * 60 + d_sec AS d_sec FROM cd; SELECT pisen, d_min + d_sec / 60 AS d_min FROM cd;
Výběr záznamů s podmínkou (selekce) :
SELECT pisen, d_min FROM cd WHERE d_min >= 5;V podmínce WHERE je možné použít následující operátory :
= | rovno |
< | menší než |
> | větší než |
<= | menší rovno |
>= | větší rovno |
<> | nerovno (ISO standard) |
!= | nerovno (některé dialekty SQL) |
AND | a zároveň |
OR | nebo |
NOT | negace |
Některé rafinovanější dotazy :
SELECT pisen, d_min FROM cd WHERE d_min >= 5 AND d_min <= 7;Tento dotaz lze přepsat na :
SELECT pisen, d_min FROM cd WHERE d_min BETWEEN 5 AND 7;Popřípadě můžeme vybrat záznamy, kde hodnota atributu leží mimo stanovený interval :
SELECT pisen, d_min FROM cd WHERE d_min NOT BETWEEN 5 AND 7;Členství ve výčtu (množině) :
SELECT interpret, pisen FROM cd WHERE interpret IN ('The Beatles', 'The Cranberies'); SELECT interpret, pisen FROM cd WHERE interpret NOT IN ('The Beatles', 'The Cranberies');Vyhledávání podle podřetězce znaků (klauzule LIKE) :
SELECT interpret, pisen FROM cd WHERE interpret LIKE 'The%'; SELECT interpret, pisen FROM cd WHERE interpret NOT LIKE 'The%';Speciální znaky používané při vyhledávání podřetězců :
% | (procenta) libovolný počet libovolných znaků (včetně 0) |
_ | (podtržítko) jeden libovolný znak |
Problém : Jak najít řetězec, kde se vyskytuje '50%' ?
Řešení :
Nadefinujeme si vlastní 'escape' znak '#', tj. např.:
WHERE poznamka LIKE '%50#%%' ESCAPE '#'
Nedefinovaná hodnota atributu (NULL) :
SELECT pisen, poznamka FROM cd; SELECT pisen, poznamka FROM cd WHERE poznamka IS NULL; SELECT pisen, poznamka FROM cd WHERE poznamka IS NOT NULL;Potřebujeme-li namísto NULL dosadit definovanou hodnotu, použijeme funkci NVL(sloupec, hodnota) :
SELECT pisen, NVL(poznamka, 'NEVYPLNENO') poznamka FROM cd WHERE interpret like 'The%';Funkci NVL() lze použít pro libovolný datový typ.
P O Z O R !!! |
Hodnoty NULL začátečníkům často přinášejí nečekané problémy. Proto se nutně podívejte na malou kapitolku věnovanou hodnotě NULL.
Třídění výsledků dotazu :
ASC | vzestupné třídění (ascending order); implicitní |
DESC | sestupné třídění (descending order) |
SELECT interpret, pisen FROM cd ORDER BY interpret; SELECT interpret, pisen FROM cd ORDER BY pisen DESC;
SELECT interpret, pisen FROM cd ORDER BY interpret DESC, pisen ASC;
SELECT pisen, d_min * 60 + d_sec AS d_sec FROM cd ORDER BY d_sec;
SELECT pisen, d_min * 60 + d_sec FROM cd ORDER BY 2;
SELECT prijmeni, jmeno FROM osoby ORDER BY primeni, jmeno DESC;V tomto případě jsou záznamy primárně seřazeny podle příjmení a v rámci stejných příjmení podle jména v obráceném abecedním pořadí.