Problém:
Chcete vytvořit novou tabulku v databázi s daty definovanými SQL dotazem.
Příklad:
Rádi bychom vytvořili tabulku gamer
na základě SQL dotazu. V tomto dotazu vybíráme data z jiné tabulky s názvem championship
níže.
id | hráč | skóre | datum_championátu |
---|---|---|---|
1 | alice | 14 | 2020-08-10 |
2 | vedoucí | 10 | 28. 9. 2020 |
3 | šťastný muž | 0 | 2020-08-10 |
4 | lukas | 6 | 2020-08-10 |
5 | oli | 12 | 2020-08-10 |
6 | velký hráč | 7 | 2020-09-12 |
V databázi vytvoříme novou tabulku s názvem gamer
která bude ukládat data ve všech sloupcích definovaných v tabulce championship
(id
, gamer
, score
a championship_date
).
Řešení 1:
CREATE TABLE gamer AS SELECT * FROM championship;
Diskuse:
Pokud byste chtěli vytvořit novou tabulku, prvním krokem je použít CREATE TABLE
klauzule a název nové tabulky (v našem příkladu:gamer
). Poté použijte AS
klíčové slovo a zadejte SELECT
příkaz, který vybírá data pro novou tabulku. V našem příkladu jsme vybrali všechny sloupce z tabulky championship
pomocí hvězdičky (*). Sada výsledků zobrazuje všechny záznamy v tabulce championship
.
Pokud však chcete vytvořit tabulku pouze s podmnožinou záznamů, můžete specifikovat vybraný dotaz jako v příkladu níže.
Řešení 2:
CREATE TABLE gamer AS SELECT gamer, score, championship_date FROM championship WHERE championship_date <= 2020-08-10;
Zde je sada výsledků:
hráč | skóre | datum_championátu |
---|---|---|
alice | 14 | 2020-08-10 |
happyman | 0 | 2020-08-10 |
lukas | 6 | 2020-08-10 |
oli | 12 | 2020-08-10 |
SELECT
dotaz načte pouze záznamy s championship_date
datum stejné nebo starší než 2020-08-10 (WHERE championship_date <= 2020-08-10
). V nové tabulce je uloženo méně sloupců než v předchozím příkladu (SELECT gamer, score, championship_date
) bez sloupce id
.
Podobným řešením tohoto problému je použití SELECT INTO
klauzule k vytvoření nové tabulky a zkopírování dat z jiné tabulky. Podívejte se na kód:
Řešení 3:
SELECT gamer, score, championship_date INTO gamer FROM championship WHERE championship_date <= 2020-08-10;
Výsledná tabulka je stejná. Všimněte si, že tato konstrukce není přítomna ve standardu SQL. V tomto SQL příkazu nejprve napíšeme SELECT
, poté seznam sloupců a poté klíčové slovo INTO
a nakonec název nové tabulky, kterou chceme vytvořit. Dále můžete přidat WHERE
a další klauzule SQL jako GROUP BY
nebo HAVING
pro filtrování záznamů pro novou tabulku.