dotazov²_v²raz ::= { dotazov²_term | dotazov²_v²raz { UNION | EXCEPT } [ ALL ] [ corresponding ] dotazov²_term } [
t°φd∞nφ
] dotazov²_term ::= specifikace_dotazu | dotazov²_term INTERSECT [ ALL ] [ corresponding ] specifikace_dotazu corresponding ::= CORRESPONDING [ BY ( jmΘno_sloupce {, jmΘno_sloupce }à )]
t°φd∞nφ
::= ORDER BY v²raz [ ASC | DESC ] {, v²raz [ASC | DESC ] }à
Dotazov² v²raz umo₧≥uje povΘst nad v²sledkem specifikace dotazu operace relaΦnφ algebry UNION, INTERSECT a EXCEPT a v²sledek set°φdit.
Operace UNION znamenß sjednocenφ mno₧in zßznam∙, operace EXCEPT rozdφl, operace INTERSECT pr∙nik. Pokud nenφ uvedeno ALL, pak ka₧d² zßznam bude ve v²sledku nejv²Üe jednou. Pokud je uvedeno ALL, pak zßznam, kter² se vyskytuje M-krßt v prvnφm operandu a N-krßt v druhΘm operandu, bude ve v²sledku operace UNION (M+N) krßt, ve v²sledku operace EXCEPT MAX(M-N, 0) krßt, ve v²sledku operace INTERSECT MIN(M, N) krßt.
Oba operandy mno₧inovΘ operace musφ mφt stejn² poΦet sloupc∙ a typy odpovφdajφcφch si sloupc∙ jsou stejnΘ. V p°φpad∞ EXCEPT a INTERSECT se p°edpoklßdß, ₧e v obou operandech jsou stejnΘ zßznamy (kterΘ tvo°φ pr∙nik nebo jsou vylouΦeny z rozdφlu).
Pomocφ specifikace corresponding lze zadat mno₧inu sloupc∙ ve v²sledku operace:
V²sledek dotazovΘho v²razu se t°φdφ podle hodnot v²raz∙, p°iΦem₧ DESC znamenß sestupnΘ t°φd∞nφ, ASC nebo nic vzestupnΘ. Pokud n∞kter² v²raz mß na dvou zßznamech stejnou hodnotu, o po°adφ zßznam∙ rozhodnΘ dalÜφ v²raz. Hodnoty NULL jsou p°i t°φd∞nφ pova₧ovßny za menÜφ ne₧ vÜechny ostatnφ hodnoty. V²razy obsa₧enΘ v klauzuli ORDER BY sm∞jφ obsahovat pouze jmΘna sloupc∙ dotazovΘho v²razu, nikoli jmΘna sloupc∙ z tabulek pou₧it²ch v dotazovΘm v²razu. V²raz definujφcφ t°φd∞nφ nesmφ b²t multiatributem.
RozÜφ°enφ jazyka SQL proti norm∞
Odchylky od Intermediate level sm∞rem k Full level nebo k SQL 3
P°φklady pou₧itφ:
Seznam firem, kterΘ ji₧ objednaly (majφ alespo≥ jednu fakturu)
SELECT F.cislo_firmy,F.nazev
FROM Firmy F
WHERE EXISTS (
SELECT *
FROM Fakt_hlav H
WHERE F.cislo_firmy=H.cislo_firmy)
Seznam firem, kterΘ dosud neobjednaly
SELECT F.cislo_firmy,F.nazev
FROM Firmy F
EXCEPT
SELECT F.cislo_firmy,F.nazev
FROM Firmy F
WHERE EXISTS (
SELECT *
FROM Fakt_hlav H
WHERE F.cislo_firmy=H.cislo_firmy)
Viz takΘ: Sbφrka dotaz∙