Problem:
Chcesz utworzyć nową tabelę w bazie danych z danymi zdefiniowanymi przez zapytanie SQL.
Przykład:
Chcielibyśmy stworzyć tabelę gamer
na podstawie zapytania SQL. W tym zapytaniu wybieramy dane z innej tabeli o nazwie championship
przedstawione poniżej.
id | gracz | wynik | championship_date |
---|---|---|---|
1 | alicja | 14 | 2020-08-10 |
2 | nadzorca | 10 | 2020-09-28 |
3 | szczęśliwy | 0 | 2020-08-10 |
4 | lukas | 6 | 2020-08-10 |
5 | oli | 12 | 2020-08-10 |
6 | wielki gracz | 7 | 2020-09-12 |
W bazie danych utwórzmy nową tabelę o nazwie gamer
który będzie przechowywać dane we wszystkich kolumnach zdefiniowanych w tabeli championship
(id
, gamer
, score
i championship_date
).
Rozwiązanie 1:
CREATE TABLE gamer AS SELECT * FROM championship;
Dyskusja:
Jeśli chcesz utworzyć nową tabelę, pierwszym krokiem jest użycie CREATE TABLE
klauzulę i nazwę nowej tabeli (w naszym przykładzie:gamer
). Następnie użyj AS
słowo kluczowe i podaj SELECT
instrukcja, która wybiera dane do nowej tabeli. W naszym przykładzie wybraliśmy wszystkie kolumny z tabeli championship
używając gwiazdki (*). Zestaw wyników wyświetla wszystkie rekordy w tabeli championship
.
Jeśli jednak chcesz utworzyć tabelę tylko z podzbiorem rekordów, możesz określić wybrane zapytanie, jak w poniższym przykładzie.
Rozwiązanie 2:
CREATE TABLE gamer AS SELECT gamer, score, championship_date FROM championship WHERE championship_date <= 2020-08-10;
Oto zestaw wyników:
gracz | wynik | championship_date |
---|---|---|
alicja | 14 | 2020-08-10 |
szczęśliwy | 0 | 2020-08-10 |
lukas | 6 | 2020-08-10 |
oli | 12 | 2020-08-10 |
SELECT
zapytanie pobiera tylko rekordy z championship_date
data równa lub starsza niż 2020-08-10 (WHERE championship_date <= 2020-08-10
). Nowa tabela przechowuje mniej kolumn niż w poprzednim przykładzie (SELECT gamer, score, championship_date
) bez kolumny id
.
Podobnym rozwiązaniem tego problemu jest użycie SELECT INTO
klauzula, aby utworzyć nową tabelę i skopiować dane z innej tabeli. Spójrz na kod:
Rozwiązanie 3:
SELECT gamer, score, championship_date INTO gamer FROM championship WHERE championship_date <= 2020-08-10;
Wynikowa tabela jest taka sama. Zauważ, że ta konstrukcja nie występuje w standardzie SQL. W tym poleceniu SQL najpierw piszemy SELECT
, następnie lista kolumn, następnie słowo kluczowe INTO
, a na końcu nazwę nowej tabeli, którą chcemy utworzyć. Następnie możesz dodać WHERE
i inne klauzule SQL, takie jak GROUP BY
lub HAVING
aby filtrować rekordy dla nowej tabeli.