602SQL-Úplná dokumentace Index  

Sbírka dotazů – str. 12

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.