Database
 sql >> Base de Dados >  >> RDS >> Database

Como criar uma tabela de outra tabela em SQL

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.