Problém:
Chcete vytvořit novou tabulku s daty zkopírovanými z jiné tabulky.
Příklad:
Naše databáze obsahuje tabulku s názvem product
s údaji v následujících sloupcích:id
(primární klíč), name
, category
a price
.
id | jméno | kategorie | cena |
---|---|---|---|
105 | růže | květina | 5,70 |
108 | stůl | nábytek | 120,00 |
115 | tulipán | květina | 6,50 |
123 | slunečnice | květina | 7,50 |
145 | kytara | hudba | 300,00 |
155 | orchideje | květina | 9,50 |
158 | flétna | hudba | 156,00 |
V databázi vytvoříme novou tabulku s názvem florist
ve kterém budou uloženy následující sloupce:id
, name
a price
. Tyto sloupce pocházejí z tabulky product
ale pouze z kategorie květina .
Je důležité si uvědomit, že vytváříme novou tabulku. Stolní florist
v této databázi neexistuje.
Struktura CREATE TABLE AS SELECT
Chcete-li vytvořit novou tabulku z jiné tabulky, můžete použít CREATE TABLE AS SELECT
. Tato konstrukce je standardní SQL. Podívejte se na kód SQL níže:
Řešení 1:
CREATE TABLE florist AS SELECT * FROM product WHERE category = ’flower’;
Zde je výsledek dotazu:
id | jméno | kategorie | cena |
---|---|---|---|
105 | růže | květina | 5,70 |
115 | tulipán | květina | 6,50 |
123 | slunečnice | květina | 7,50 |
155 | orchideje | květina | 9,50 |
Pomocí CREATE TABLE
, můžete vytvořit novou tabulku zkopírováním dat z jiné tabulky. V tomto případě nejprve použijeme CREATE TABLE
klauzule s názvem nového stolu (v našem příkladu:florist
), dále napíšeme AS
a SELECT
dotaz na názvy sloupců (v našem příkladu:*
) a poté napíšeme FROM
následovaný názvem tabulky, ze které jsou data shromažďována (v našem příkladu:product
). Potom můžete použít jakoukoli klauzuli SQL:WHERE
, GROUP BY
, HAVING
, atd.
Nový stolní florist
bude obsahovat definici sloupců z product
tabulka (id
, name
, category
a price
). Počet řádků je omezen pomocí klauzule WHERE, která filtruje záznamy tak, aby načítala pouze data z kategorie květina .
Struktura SELECT INTO
Dalším řešením je použít SELECT INTO
. Tato syntaxe je nestandardní SQL, ale je podporována mnoha populárními databázemi.
Řešení 2:
SELECT id, name, price INTO florist FROM product WHERE category=’flower’;
Zde je výsledek:
id | jméno | cena |
---|---|---|
105 | růže | 5,70 |
115 | tulipán | 6,50 |
123 | slunečnice | 7,50 |
155 | orchideje | 9,50 |
Diskuse:
Pokud byste chtěli vytvořit novou tabulku na základě struktury a dat z jiné tabulky, můžete použít SELECT INTO
doložka. Nejprve napište SELECT
klauzule následovaná seznamem sloupců (v našem příkladu:id
, name
a price
) ze stávající tabulky (v našem příkladu:product
).
Všimněte si, že v tabulce product
. Vybrali jsme pouze sloupce, které nás zajímají.
Dále použijte klíčové slovo INTO
s názvem nového stolu, který chcete vytvořit (v našem příkladu:florist
). Poté napište klíčové slovo FROM s názvem stávající tabulky (v našem příkladu:product
).
Pokud chcete vybrat filtrované řádky z tabulky, použijte WHERE
doložka. Po WHERE
, napište podmínky pro filtrování dat (v našem příkladu:WHERE category=’flower’
).
V tomto příkladu vytváříme novou tabulku florist
která má méně sloupců než tabulka product
(rozdíl je kategorie sloupců). Tato nová tabulka má také méně řádků – pouze řádky s kategorií květina .
Samozřejmě, pokud chcete vytvořit tabulku se všemi sloupci v druhé tabulce, můžete použít *
místo výpisu sloupců za SELECT
. Viz příklad níže:
Řešení 2:
SELECT * INTO florist FROM product WHERE category=’flower’;
Zde je výsledek:
id | jméno | kategorie | cena |
---|---|---|---|
105 | růže | květina | 5,70 |
115 | tulipán | květina | 6,50 |
123 | slunečnice | květina | 7,50 |
155 | orchideje | květina | 9,50 |
Pomocí SELECT INTO
je snadný způsob, jak vytvořit novou tabulku založenou na existující tabulce v databázi.