1. CVIČENÍ


Výběr záznamů - příkaz SELECT

Nejprve syntaktická konstrukce příkazu :

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í :

Pozn.: předchozí příkazy využívají informací uložených v katalogu. Příkaz DESC (describe) není standarním SQL příkazem. Je to pouze interní příkaz SQL*Plus, který získá informace o sloupcích tabulky z pohledu USER_TAB_COLUMNS.

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)
ANDa zároveň
ORnebo
NOTnegace

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.

Třídění výsledků dotazu :