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.