602SQL-Úplná dokumentace Index  

Specifikace dotazu (SQL)

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

Pokud nejsou tyto podmínky splněné, není obsah tohoto výrazu v odpovědi definován.

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