602SQL-Úplná dokumentace Index  

Sbírka dotazů – str. 8

Příklad 15

Zadání: Vyberte firmy, které byly do databáze zapsány v měsících leden až březen včetně.

SQL:

  SELECT Firmy.cislo,Firmy.nazev,Firmy.pracovnik,Firmy.dat_zapisu
  FROM Firmy
  WHERE (Month(dat_zapisu) IN (1,2,3))

Poznámky:

a) stejného cíle by šlo dosáhnout i pomocí jiných zápisů podmínky, např.

  WHERE (Month(dat_zapisu) BETWEEN 1 AND 3)

nebo

  WHERE (Month(dat_zapisu) >=1 AND Month(dat_zapisu) <=3)

b) operátor IN má i druhé použití – hodnota se pomocí něho porovnává s výsledkem subdotazu.

Příklad 16

Zadání: Vyberte faktury jednoho typu za více než je průměrná hodnota faktury tohoto typu.

Popis řešení: Rozdělíme si úlohu na dva kroky. Nejprve spočteme průměrnou hodnotu faktury:

  SELECT AVG(castka)
  FROM Faktury
  WHERE druh=2

Tento dotaz by bylo výhodné umístit jako součást podmínky v sekci WHERE. 602SQL takovéto použití dotazu (neboli subdotazu) v dotazu umožňuje.

SQL:

  SELECT *
  FROM Faktury
  WHERE (Faktury.druh=2 AND
    Faktury.castka  > (SELECT AVG(castka)
                       FROM Faktury
                       WHERE druh=2))

Poznámky:

a) Subdotaz se vždy ohraničen kulatými závorkami.

b) Dotaz je editovatelný, protože agregační funkce je pouze v subdotazu.

c) V podobném dotazu není možné použít klauzuli HAVING (jak to umožňoval 602SQL do verze 5).