SELECT
SQL příkaz SELECT vrací množinu záznamů z jedné a nebo více tabulek.
Syntaxe
editovat 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
editovat SELECT id, zakaznik, cena FROM smlouvy WHERE cena>10000 AND se_slevou=1 ORDER BY cena DESC
Další vlastnosti
editovatDISTINCT
editovatKlíč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ů
editovatDatabá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
editovatDatabá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
editovatDatabá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
editovatKonkré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.