SELECT
SQL příkaz SELECT vrací množinu záznamů z jedné a nebo více tabulek.
Syntaxe
SELECT
[ALL | DISTINCT]
{[tabulka. | alias. | pohled.]{* | sloupec | sloupec AS alias}
| AVG([tabulka. | alias. | pohled.]<sloupec>) [AS <alias>]
| MIN([tabulka. | alias. | pohled.]<sloupec>) [AS <alias>]
| MAX([tabulka. | alias. | pohled.]<sloupec>) [AS <alias>]
| COUNT([tabulka. | alias. | pohled.]<* | sloupec>) [AS <alias>]
}[,...n]
[INTO jméno_nové_tabulky]
FROM <tabulka> [AS <alias>][,... n]
[[INNER | FULL] JOIN <tabulka> ON <spojovaci podminka>
| <LEFT | RIGHT> OUTER JOIN <tabulka> ON <spojovaci podminka>
| CROSS JOIN <sloupce>
[AS <alias>]
[,... n]]
[WHERE <podmínky>
| <sloupec> <operator> <sloupec | hodnota>
| <sloupec> <operator> <sloupec | hodnota> <AND | OR | NOT> <sloupec> <operator> <sloupec | hodnota>
| <sloupec> BETWEEN <hodnota> AND <hodnota>
| <sloupec> LIKE <regularni vyraz>
| <sloupec> IN <vycet hodnot>
| <sloupec | vyraz> <operator> ANY | SOME (poddotaz)
| EXISTS (poddotaz)]
[GROUP BY <nazev sloupce>[,... n]]
[HAVING <omezujici podminka postavena na vysledcich klauzule GROUP BY>]
[ORDER BY <sloupec>[,... n] [ASC | DESC]]
[UNION <SELECT dotaz>]
Míra implementace SQL dotazů se liší u každého SŘBD, proto je třeba mít při psaní konkrétních dotazů na zřeteli konkrétní SŘBD, na kterém bude dotaz prováděn. Bližší informace naleznete v referenčních manuálech.
Příklad
SELECT id, zakaznik, cena FROM smlouvy WHERE cena>10000 AND se_slevou=1 ORDER BY cena DESC
Další vlastnosti
DISTINCT
Klíčové slovo DISTINCT
(někdy používáno DISTINCTROW
) z výpisu odstraní záznamy, které se v dané hodnotě pole opakují. Výsledkem pro daný sloupec bude seznam všech hodnot (vyhovující případné podmínce výpisu); každé zastoupené jen jednou. SELECT
s DISTINCT
vypisuje z logických důvodů většinou jen jedno pole.
Omezení počtu zobrazených řádků
Databázové stroje většinou umožňují pomocí nějakého klíčového slova v SQL omezit počet vybraných řádků na určitou hodnotu.
TOP
Databáze Microsoft Access, MSSQL mají klauzuli TOP
, která se vkládá hned za SELECT
…
SELECT TOP 10 jmeno_skladby FROM zebricek_skladeb ORDER BY poslouchanost DESC;
LIMIT
a OFFSET
Databáze MySQL, PostgreSQL mají klauzuli LIMIT
, která kromě maximálního počtu zobrazených řádků umožňuje určit i od jakého místa (ofsetu) z výsledných řádků dotazu (pomyslného celkového výběru) má vracení výsledku začít. Například dotaz
SELECT jmeno_skladby FROM zebricek_skladeb ORDER BY poslouchanost LIMIT 5,10;
by zobrazil záznamy na 5. až 15. místě. Je možné použít
LIMIT
s jedním parametrem – maximálním počtem vypsaných řádkůLIMIT
se dvěma parametry – první je maximální počet vypsaných řádků a druhý pozice, od které má výpis začínat (offset)LIMIT
v kombinaci s klíčovým slovemOFFSET
– místo varianty dvou čísel oddělených čárkou
SELECT jmeno_skladby FROM zebricek_skladeb ORDER BY poslouchanost LIMIT 10 OFFSET 5;
SQL_CALC_FOUND_ROWS
Konkrétně MySQL navíc podporuje klíčové slovo SQL_CALC_FOUND_ROWS
(není součástí žádného SQL standardu), které se umisťuje za SELECT
a způsobí, že databázový stroj si i přes omezení dané klíčovým slovem LIMIT
ve výběrovém dotazu uloží celkový počet záznamů splňujících podmínku v klauzuli WHERE
(pokud je zadaná) a ten pak může poslat jako výsledek dotazu:
SELECT FOUND_ROWS()
Výhodou je, že pro zjištění celkového počtu řádků nemusí být spouštěn další dotaz.