|
![]() | Zobecněná tabulka | ![]() | Dotazy | Dotazový výraz | ![]() |
specifikace_dotazu ::= SELECT [ ALL | DISTINCT ] výraz [ přejmenování ] { , výraz [ přejmenování ] }…
FROM zobecněná tabulka { , zobecněná tabulka }…
[ WHERE podmínka_where ]
[ GROUP BY výraz_group { , výraz_group }… ]
[ HAVING podmínka_having ]
přejmenování ::= AS jméno
Specifikace dotazu vybere nebo vytvoří množinu záznamů ze záznamů uvedených zobecněných tabulek.
Je-li uvedeno DISTINCT, vyberou se pouze odlišné záznamy (jen ve sloupcích pevné velikosti). Je-li uvedeno ALL (nebo nic), vyberou se všechny vyhovující záznamy.
Je-li uvedena více než jedna zobecněná tabulka, provede se mezi nimi operace JOIN, tedy každý záznam se spojí s každým. Jinak se použijí všechny záznamy zobecněné tabulky.
Je-li uvedena klauzule WHERE, ze získaných záznamů se vyberou pouze ty, na nichž je podmínka_where splněna.
Je-li uvedena klauzule GROUP BY, záznamy se rozčlení do skupin tak, že každá skupina obsahuje záznamy se stejnými hodnotami všech výrazů_group.
Je-li uvedena klauzule HAVING, vyberou se pouze ty skupiny, na nichž je splněna podmínka having.
Odpověď na dotaz tvoří sloupce s hodnotami výrazů na získaných záznamech nebo skupinách záznamů. Aby bylo možno vyhodnotit výrazy nad skupinami, vyžaduje se, aby každý výraz
V podmínce where se nesmí vyskytovat agregační funkce (s výjimkou subdotazů). Tyto funkce je možno použít pouze ve výrazech v klauzuli SELECT a v podmínce having. Pokud specifikace dotazu neobsahuje GROUP BY, pak se tyto agregační funkce počítají vzhledem k celé odpovědi na dotaz, jinak se počítají zvlášť pro každou skupinu.
Jména sloupců v odpovědi na dotaz závisejí na struktuře výrazů. Pokud výraz je tvořen jménem sloupce některé zobecněné tabulky, pak si jméno zachová, jinak je unikátní jméno přiděleno automaticky (např. Expr1 apod.). Vzniknou-li zachováním jmen sloupců duplikátní jména, mohou být automaticky odstraněna pomocí nastavení příznaku SQLOPT_DUPLIC_COLNAMES (256) ve funkci Set_sql_option
. Také je možné jména sloupců určit již ve specifikaci - pomocí klauzule AS.
Výraz za SELECT může také být *
- pak se v odpovědi objeví všechny sloupce všech zobecněných tabulek. Je-li výraz ve tvaru zobecněná tabulka.*
, budou v odpovědi všechny sloupce zobecněné tabulky. Je-li použito klauzule SELECT *
, nesmí již následovat další výrazy. Mají-li se do výběru sloupců zadaného pomocí SELECT *
přidat i systémové sloupce (začínající _w5_...) je rozlišeno pomocí příznaku SQLOPT_USE_SYS_COLS (8192) ve funkci Set_sql_option
.
Výrazem může být jméno sloupce (nebo *), konstanta, podmíněný výraz CASE, standardní SQL funkce nebo funkce vytvořená pomocí DECLARE FUNCTION, agregační funkce, proměnná serveru, globální proměnná klienta, subdotaz vracející jeden řádek a jeden sloupec nebo výraz tvořený těmito subvýrazy.
Podrobnosti o sestavení podmínek ve specifikaci dotazu viz podmínka
Příklady:
SELECT Month(datum),SUM(Objednavky.objed)
FROM Firmy, Objednavky
WHERE Objednavky.firma=Firmy.firma
GROUP BY Month(datum)
Viz
![]() | Zobecněná tabulka | ![]() | Dotazy | Dotazový výraz | ![]() |