Problema:
Você gostaria de criar uma nova tabela em um banco de dados com dados definidos por uma consulta SQL.
Exemplo:
Gostaríamos de criar a tabela
gamer
com base em uma consulta SQL. Nesta consulta, selecionamos dados de outra tabela chamada championship
apresentado abaixo. id | jogador | pontuação | data_do_campeonato |
---|---|---|---|
1 | alice | 14 | 2020-08-10 |
2 | supervisor | 10 | 28-09-2020 |
3 | homem feliz | 0 | 2020-08-10 |
4 | lukas | 6 | 2020-08-10 |
5 | oli | 12 | 2020-08-10 |
6 | maior | 7 | 2020-09-12 |
No banco de dados, vamos criar uma nova tabela chamada
gamer
que armazenará dados em todas as colunas definidas na tabela championship
(id
, gamer
, score
e championship_date
). Solução 1:
CREATE TABLE gamer AS SELECT * FROM championship;
Discussão:
Se você deseja criar uma nova tabela, o primeiro passo é usar o
CREATE TABLE
cláusula e o nome da nova tabela (no nosso exemplo:gamer
). Em seguida, use o AS
palavra-chave e forneça um SELECT
instrução que seleciona dados para a nova tabela. Em nosso exemplo, selecionamos todas as colunas da tabela championship
usando o asterisco (*). O conjunto de resultados exibe todos os registros na tabela championship
. No entanto, se você deseja criar uma tabela com apenas um subconjunto dos registros, pode especificar a consulta selecionada como no exemplo abaixo.
Solução 2:
CREATE TABLE gamer AS SELECT gamer, score, championship_date FROM championship WHERE championship_date <= 2020-08-10;
Aqui está o conjunto de resultados:
jogador | pontuação | data_do_campeonato |
---|---|---|
alice | 14 | 2020-08-10 |
homem feliz | 0 | 2020-08-10 |
lukas | 6 | 2020-08-10 |
oli | 12 | 2020-08-10 |
O
SELECT
consulta recupera apenas os registros com um championship_date
data igual ou anterior a 2020-08-10 (WHERE championship_date <= 2020-08-10
). A nova tabela armazena menos colunas do que no exemplo anterior (SELECT gamer, score, championship_date
) sem a coluna id
. Uma solução semelhante para este problema é usar o
SELECT INTO
cláusula para criar uma nova tabela e copiar dados de outra tabela. Dê uma olhada no código:Solução 3:
SELECT gamer, score, championship_date INTO gamer FROM championship WHERE championship_date <= 2020-08-10;
A tabela resultante é a mesma. Observe que essa construção não está presente no padrão SQL. Neste comando SQL, primeiro escrevemos
SELECT
, depois a lista de colunas, ao lado da palavra-chave INTO
, e finalmente o nome da nova tabela que queremos criar. Em seguida, você pode adicionar WHERE
e outras cláusulas SQL como GROUP BY
ou HAVING
para filtrar registros para a nova tabela.