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.