|
![]() | Strana 11 (SELECT subdotaz, COUNT DISTINCT) | ![]() | Sbírka příkladů SQL dotazů | Strana 13 (UNION, subdotaz) | ![]() |
Příklad 20
Zadání: Mějme tabulky FAKTURY a FAKT_2 a v nich data z let 1998 a 1997. Vypište faktury odběratelů z dvou měsíců na přelomu roku 1997.
Popis řešení: Úloha vyžaduje spojení dat ze dvou tabulek, nikoli však na základě relačního vztahu, nýbrž pouhým přidáním záznamů za sebe. Sjednocení více tabulek sice 602SQL pomocí SQL umí vytvořit, nicméně tato operace není ani obvyklá ani častá. Není proto ani implementována do interaktivního návrháře. Pokud chcete tabulky sjednotit, musíte zapsat příkaz SQL přímo v jeho textové podobě. Obě části dotazu spojte klíčovým slovem UNION a výsledek můžete setřídit sestupně podle data.
SQL:
SELECT *
FROM Fakt_2
WHERE dat1 > 30.11.1997
UNION
SELECT *
FROM Faktury
WHERE dat1 < 1.2.1998
ORDER BY dat1 DESC
Poznámky:
a) Obě části sjednocení musí mít v části SELECT položky stejných typů.
b) Setřídění se týká obou částí dotazu, třídit jednotlivé části před sjednocením nelze.
c) Použitím UNION
(bez ALL
) říkáte, že každý záznam bude ve výsledku nejvýše jednou (duplicity budou vyloučeny).
d) Není-li třeba zajistit, aby ve výsledku byl každý záznam jen jednou (jako v tomto případě), použijte klauzuli UNION ALL
, která výrazně zrychlí vyhodnocení. Mají-li však obě části UNIONu neprázdný průnik, je třeba použití ALL
zvažovat - např. pro výpis je vhodná unikátnost záznamů, ale je-li tento dotaz např. zdrojem pro další databázovou operaci, může být rychlejší sestavit dotaz s duplicitami a pro ně provést operaci dvakrát než vyhodnocovat unikátnost.
![]() | Strana 11 (SELECT subdotaz, COUNT DISTINCT) | ![]() | Sbírka příkladů SQL dotazů | Strana 13 (UNION, subdotaz) | ![]() |