Problema:
Você gostaria de criar uma nova tabela com dados copiados de outra tabela.
Exemplo:
Nosso banco de dados tem uma tabela chamada
product
com dados nas seguintes colunas:id
(chave primária), name
, category
, e price
. id | nome | categoria | preço |
---|---|---|---|
105 | rosa | flor | 5,70 |
108 | mesa | móveis | 120,00 |
115 | tulipa | flor | 6,50 |
123 | girassol | flor | 7,50 |
145 | guitarra | música | 300,00 |
155 | orquídea | flor | 9,50 |
158 | flauta | música | 156,00 |
No banco de dados, vamos criar uma nova tabela chamada
florist
que irá armazenar as seguintes colunas:id
, name
, e price
. Essas colunas vêm da tabela product
mas apenas da categoria flor . É importante notar que estamos criando uma nova tabela. A mesa
florist
não existe neste banco de dados. A estrutura CREATE TABLE AS SELECT
Para criar uma nova tabela a partir de outra tabela, você pode usar
CREATE TABLE AS SELECT
. Essa construção é SQL padrão. Observe o código SQL abaixo:Solução 1:
CREATE TABLE florist AS SELECT * FROM product WHERE category = ’flower’;
Segue o resultado da consulta:
id | nome | categoria | preço |
---|---|---|---|
105 | rosa | flor | 5,70 |
115 | tulipa | flor | 6,50 |
123 | girassol | flor | 7,50 |
155 | orquídea | flor | 9,50 |
Usando
CREATE TABLE
, você pode criar uma nova tabela copiando dados de outra tabela. Neste caso, primeiro usamos o CREATE TABLE
cláusula com o nome da nova tabela (no nosso exemplo:florist
), escrevemos em seguida AS
e o SELECT
query com os nomes das colunas (no nosso exemplo:*
), e então escrevemos FROM
seguido pelo nome da tabela da qual os dados são coletados (no nosso exemplo:product
). Então, você pode usar qualquer cláusula SQL:WHERE
, GROUP BY
, HAVING
, etc A nova tabela
florist
conterá a definição das colunas do product
tabela (id
, name
, category
, e price
). O número de linhas é limitado usando uma cláusula WHERE, filtrando os registros para recuperar apenas dados da categoria flor . A estrutura SELECT INTO
Outra solução é usar
SELECT INTO
. Essa sintaxe não é SQL padrão, mas é suportada por muitos bancos de dados populares. Solução 2:
SELECT id, name, price INTO florist FROM product WHERE category=’flower’;
Aqui está o resultado:
id | nome | preço |
---|---|---|
105 | rosa | 5,70 |
115 | tulipa | 6,50 |
123 | girassol | 7,50 |
155 | orquídea | 9,50 |
Discussão:
Se você deseja criar uma nova tabela com base na estrutura e nos dados de outra tabela, você pode usar o
SELECT INTO
cláusula. Primeiro, escreva um SELECT
cláusula seguida por uma lista de colunas (no nosso exemplo:id
, name
, e price
) da tabela existente (no nosso exemplo:product
). Observe que há mais colunas na tabela
product
. Selecionamos apenas as colunas em que estamos interessados. Em seguida, use a palavra-chave
INTO
com o nome da nova tabela que você deseja criar (no nosso exemplo:florist
). Em seguida, escreva a palavra-chave FROM com o nome da tabela existente (no nosso exemplo:product
). Se você deseja selecionar linhas filtradas da tabela, use o
WHERE
cláusula. Depois de WHERE
, escreva as condições para filtrar os dados (no nosso exemplo:WHERE category=’flower’
). Neste exemplo, estamos criando uma nova tabela
florist
que tem menos colunas que a tabela product
(a diferença é a categoria da coluna). Esta nova tabela também tem menos linhas – apenas as linhas com a categoria flor . Claro, se você quiser criar uma tabela usando todas as colunas da outra tabela, você pode usar
*
em vez de listar as colunas após SELECT
. Veja o exemplo abaixo:Solução 2:
SELECT * INTO florist FROM product WHERE category=’flower’;
Aqui está o resultado:
id | nome | categoria | preço |
---|---|---|---|
105 | rosa | flor | 5,70 |
115 | tulipa | flor | 6,50 |
123 | girassol | flor | 7,50 |
155 | orquídea | flor | 9,50 |
Usando
SELECT INTO
é uma maneira fácil de criar uma nova tabela com base em uma tabela existente no banco de dados.