|
![]() | Specifikace dotazu | ![]() | Dotazy |
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. Uvedenφ ALL v²razn∞ zrychluje vyhodnocenφ dotazu.
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Θ:
![]() | Specifikace dotazu | ![]() | Dotazy |