602SQL-┌plnß dokumentace Index   Tisk  

Specifikace dotazu (SQL)

specifikace_dotazu ::= SELECT [ 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²razg { , v²razg }à ]
[ 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 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 podmφnka_where, ze zφskan²ch zßznam∙ se vyberou pouze ty, na nich je tato podmφnka 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∙g.

Je-li uvedena klauzule HAVING, vyberou se pouze ty skupiny, na nich₧ je spln∞na podmφnka having.

Odpov∞∩ na dotaz zadan² touto specifikacφ tvo°φ sloupce zadanΘ 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 byl bu∩ toto₧n² s n∞kter²m v²razemg nebo aby obsahoval odkazy na sloupce pouze jako argumenty agregaΦnφch funkcφ.

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.

Äßdn² v²razg nesmφ b²t multiatributem.

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 (_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 takΘ:

Dotazy v SQL

Sbφrka dotaz∙

V²razy v SQL