|
![]() | Strana 7 (EXTRACT, OUTER JOIN) | ![]() | Sbírka příkladů SQL dotazů | Strana 9 (subdotaz) | ![]() |
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).
![]() | Strana 7 (EXTRACT, OUTER JOIN) | ![]() | Sbírka příkladů SQL dotazů | Strana 9 (subdotaz) | ![]() |