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.