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.