Problem:
Chcesz utworzyć nową tabelę z danymi skopiowanymi z innej tabeli.
Przykład:
Nasza baza danych zawiera tabelę o nazwie product z danymi w następujących kolumnach:id (klucz podstawowy), name , category i price .
| id | nazwa | kategoria | cena |
|---|---|---|---|
| 105 | róża | kwiat | 5,70 |
| 108 | biurko | meble | 120,00 |
| 115 | tulipan | kwiat | 6,50 |
| 123 | słonecznik | kwiat | 7,50 |
| 145 | gitara | muzyka | 300,00 |
| 155 | storczyk | kwiat | 9,50 |
| 158 | flet | muzyka | 156,00 |
W bazie danych utwórzmy nową tabelę o nazwie florist który będzie przechowywać następujące kolumny:id , name i price . Te kolumny pochodzą z tabeli product ale tylko z kategorii kwiat .
Należy zauważyć, że tworzymy nową tabelę. Stół florist nie istnieje w tej bazie danych.
Struktura CREATE TABLE AS SELECT
Aby utworzyć nową tabelę z innej tabeli, możesz użyć CREATE TABLE AS SELECT . Ta konstrukcja to standardowy SQL. Spójrz na poniższy kod SQL:
Rozwiązanie 1:
CREATE TABLE florist AS SELECT * FROM product WHERE category = ’flower’;
Oto wynik zapytania:
| id | nazwa | kategoria | cena |
|---|---|---|---|
| 105 | róża | kwiat | 5,70 |
| 115 | tulipan | kwiat | 6,50 |
| 123 | słonecznik | kwiat | 7,50 |
| 155 | storczyk | kwiat | 9,50 |
Korzystanie z CREATE TABLE , możesz utworzyć nową tabelę, kopiując dane z innej tabeli. W tym przypadku najpierw używamy CREATE TABLE klauzula z nazwą nowej tabeli (w naszym przykładzie:florist ), następnie piszemy AS i SELECT zapytanie z nazwami kolumn (w naszym przykładzie:* ), a następnie piszemy FROM następnie nazwa tabeli, z której zbierane są dane (w naszym przykładzie:product ). Następnie możesz użyć dowolnej klauzuli SQL:WHERE , GROUP BY , HAVING itp.
Nowa tabela florist będzie zawierać definicję kolumn z product tabela (id , name , category i price ). Liczba wierszy jest ograniczona za pomocą klauzuli WHERE, filtrującej rekordy tak, aby pobierać tylko dane z kategorii kwiat .
Struktura SELECT INTO
Innym rozwiązaniem jest użycie SELECT INTO . Ta składnia jest niestandardową składnią SQL, ale jest obsługiwana przez wiele popularnych baz danych.
Rozwiązanie 2:
SELECT id, name, price INTO florist FROM product WHERE category=’flower’;
Oto wynik:
| id | nazwa | cena |
|---|---|---|
| 105 | róża | 5,70 |
| 115 | tulipan | 6,50 |
| 123 | słonecznik | 7,50 |
| 155 | storczyk | 9,50 |
Dyskusja:
Jeśli chcesz utworzyć nową tabelę na podstawie struktury i danych z innej tabeli, możesz użyć SELECT INTO klauzula. Najpierw napisz SELECT klauzula, po której następuje lista kolumn (w naszym przykładzie:id , name i price ) z istniejącej tabeli (w naszym przykładzie:product ).
Zauważ, że w tabeli jest więcej kolumn product . Wybraliśmy tylko te kolumny, które nas interesują.
Następnie użyj słowa kluczowego INTO z nazwą nowej tabeli, którą chcesz utworzyć (w naszym przykładzie:florist ). Następnie wpisz słowo kluczowe FROM z nazwą istniejącej tabeli (w naszym przykładzie:product ).
Jeśli chcesz wybrać przefiltrowane wiersze z tabeli, użyj WHERE klauzula. Po WHERE , wpisz warunki filtrowania danych (w naszym przykładzie:WHERE category=’flower’ ).
W tym przykładzie tworzymy nową tabelę florist która ma mniej kolumn niż tabela product (różnica to kategoria kolumny). Ta nowa tabela ma również mniej wierszy – tylko wiersze z kategorią kwiat .
Oczywiście, jeśli chcesz utworzyć tabelę, używając wszystkich kolumn z drugiej tabeli, możesz użyć * zamiast wymieniać kolumny po SELECT . Zobacz przykład poniżej:
Rozwiązanie 2:
SELECT * INTO florist FROM product WHERE category=’flower’;
Oto wynik:
| id | nazwa | kategoria | cena |
|---|---|---|---|
| 105 | róża | kwiat | 5,70 |
| 115 | tulipan | kwiat | 6,50 |
| 123 | słonecznik | kwiat | 7,50 |
| 155 | storczyk | kwiat | 9,50 |
Używanie SELECT INTO to łatwy sposób na utworzenie nowej tabeli na podstawie istniejącej tabeli w bazie danych.