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

editovat

DISTINCT

editovat

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ů

editovat

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.

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

editovat

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 slovem OFFSET – 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

editovat

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.

Externí odkazy

editovat