|
![]() | 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 klauzulu 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) | ![]() |