Tabulkový výraz
- Výrazu, jehož hodnota je tabulka, říkáme tabulkový výraz.
Výraz SELECT
- Příkazy se skládají z částí, které se nazývají klauzule.
- Klauzule se většinou jmenují podle klíčového slova, které klauzuli uvozuje.
- Například výraz
SELECT
se může skládat z klauzulíSELECT
aFROM
Klauzule SELECT
a FROM
( SELECT columns FROM table )
- Část
SELECT columns
jeSELECT
klauzule a částFROM table
jeFROM
klauzule.- Místo
columns
popisujeme sloupce výsledné tabulky.
- Místo
Např. pokud vyhodnotíme:
SELECT title AS title, year + 1 AS next_year FROM movies;
-- Pro tabulku:
title | year | length
-----------------+------+--------
The Matrix | 1999 | 136
The Avengers | 2012 | 143
The Avengers | 1998 | 89
A Space Odyssey | 1968 | 149
(4 rows)
-- Dostaneme:
title | next_year
-----------------+-----------
The Matrix | 2000
The Avengers | 2013
The Avengers | 1998
A Space Odyssey | 1969
Pro odstranění duplicit slouží klauzule DISTINCT
:
SELECT DISTINCT title FROM movies;
-- Dostaneme:
title
-----------------
The Matrix
The Avengers
A Space Odyssey
(3 rows)
Klauzule WHERE
Výraz SELECT
může mít tvar:
( SELECT DISTINCT columns FROM table WHERE condition )
- Pomocí podmínky
condition
získáme tabulku, která bude v těle obsahovat právě jeden řádek za každý řádek originální tabulky, pro který je podmínkacondition
splněna.
SELECT * FROM movies WHERE title = 'The Avengers';
-- Získáme:
title | year | length
--------------+------+--------
The Avengers | 2012 | 143
The Avengers | 1998 | 89
(2 rows)
Klauzule ORDER BY
ORDER BY
klauzule se skládá z výrazů tvaru:column ASC
acolumn DESC
.
SELECT * FROM movies ORDER BY year ASC;
-- Získáme:
director | title | year
-----------------+---------------------------------+------
Stanley Kubrick | Lolita | 1962
Robert Mulligan | To Kill a Mockingbird | 1962
Carol Reed | Oliver! | 1968
Stanley Kubrick | 2001: A Space Odyssey | 1968
Milos Forman | One Flew Over the Cuckoo’s Nest | 1975
Stanley Kubrick | Barry Lyndon | 1975
Terry Gilliam | Monty Python and the Holy Grail | 1975
(7 rows)
Klauzule LIMIT
a OFFSET
LIMIT count
OFFSET start
- Nejprve se vyhodnocuje klauzule
OFFSET
, která pro tabulku vrátí tabulku , jejíž tělo tvoří řádky tabulky D bez prvníchstart
řádků - Klauzule
LIMIT
vrátí pro tabulku tabulku , jejíž tělo tvoří prvníchcount
řádků těla tabulky D.
Klauzule GROUP BY
GROUP BY column1, column2, ...
- Seskupení dat:
GROUP BY
seskupí řádky výsledné tabulky, které mají stejné hodnoty ve specifikovaných sloupcích. - Agregační funkce: Po seskupení můžete nad těmito skupinami použít různé agregáční funkce.
- Například
COUNT()
,SUM()
,AVG()
,MAX()
, aMIN()
.
- Například
Máme tabulku:
-- Pro tabulku:
| title | year | country | duration |
|---------------------------------|------|---------|----------|
| 2001: A Space Odyssey | 1968 | UK | 161 |
| Barry Lyndon | 1975 | UK | 184 |
| The Man Who Shot Liberty Valance| 1962 | USA | 113 |
| The Return of the Pink Panther | 1975 | UK | 113 |
| One Flew Over the Cuckoo’s Nest | 1975 | USA | 133 |
| To Kill a Mockingbird | 1962 | USA | 129 |
| Monty Python and the Holy Grail | 1975 | UK | 91 |
| Lolita | 1962 | UK | 152 |
| Jaws | 1975 | USA | 130 |
(9 rows)
-- Položíme dotaz:
SELECT year, country, count(*) AS count
FROM movies
GROUP BY year, country;
-- Výsledek:
| year | country | count |
|------|---------|-------|
| 1962 | UK | 1 |
| 1968 | UK | 1 |
| 1975 | USA | 2 |
| 1975 | UK | 3 |
| 1962 | USA | 2 |
(5 rows)
Klauzule SELECT
výrazu
( SELECT columns
FROM tables
WHERE condition
GROUP BY columns
HAVING condition
ORDER BY ordering
LIMIT count
OFFSET start )
Klauzule se vyhodnocují v tomto pořadí:
FROM
- získání vstupní tabulkyWHERE
- filtrování řádkůGROUP BY
- seskupováníHAVING
- filtrování skupinSELECT
- výpočet výstupní tabulkyORDER BY
- třídění řádkůOFFSET
- vynechání řádků ze začátkuLIMIT
- omezení počtu řádků
Navigace
Předchozí: Tabulky v SQL a jejich vztah k relacím Následující: Relační operace - sjednocení, průnik, rozdíl, restrikce, projekce, přirozené spojení, přejmenování atributů Celý okruh: 2. Informační technologie