SQL INSERT INTO SELECT: Copiar dados entre tabelas

A instrução SQL INSERT INTO SELECT é usada para transferir dados de uma tabela para outra. No entanto, a nova tabela deve já estar criada. Colunas que não forem preenchidas receberão o valor NULL na nova tabela.

O que é SQL INSERT INTO SELECT?

SQL (Structured Query Language) permite criar várias tabelas dentro de um banco de dados e preenchê-las com dados. Pode haver casos em que você deseja transferir os dados de uma tabela total ou parcialmente para outra tabela. Em vez de inserir todas as entradas novamente, você pode copiar os dados e inseri-los no local desejado. A instrução adequada para essa tarefa é o SQL INSERT INTO SELECT. Ela copia os dados conforme o necessário e os insere na nova tabela. As entradas já existentes não são sobrescritas. É necessário que os tipos de dados da tabela original e da nova tabela sejam compatíveis.

vServer (VPS) da IONOS

Hospedagem VPS poderosa e de baixo custo para rodar suas aplicações sob medida, com assistente pessoal e suporte 24 horas.

  • Armazenamento 100% SSD
  • Pronto em 55 segundos
  • Certificado SSL

Sintaxe e funcionamento de SQL INSERT INTO SELECT

A sintaxe do SQL INSERT INTO SELECT varia dependendo se você deseja copiar todas as colunas de uma tabela para outra ou se deseja transferir apenas algumas colunas selecionadas. Para uma transferência completa, a estrutura é a seguinte:

INSERT INTO nova_tabela
SELECT * FROM tabela_antiga
WHERE condição;
sql

A condição WHERE é opcional.

Se você deseja transferir apenas colunas selecionadas, a sintaxe apropriada é:

INSERT INTO nova_tabela (coluna1, coluna2, coluna3,)
SELECT coluna1, coluna2, coluna3,FROM tabela_antiga
WHERE condição;
sql

Aqui, você especifica as colunas individuais e usa o comando SQL SELECT para selecioná-las. Em ambos os casos, é importante que a tabela nova_tabela já esteja criada no banco de dados. Além disso, os nomes de todas as colunas da tabela antiga e da nova tabela devem corresponder. Colunas para as quais não há dados serão preenchidas com o valor NULL.

Copiar e colar tabela inteira com SQL INSERT INTO SELECT

Para ilustrar como SQL INSERT INTO SELECT funciona na prática, criaremos uma tabela de exemplo chamada “Lista_de_Clientes_2023”. Esta tabela contém informações sobre o número do cliente, nome, localidade e quantidade de itens encomendados. Ela se parece com isto:

Número do Cliente Nome Localidade Itens
1427 Souza São Paulo 13
1377 Sales Vitória 9
1212 Peters Vitória 15
1431 Barbosa Praia Grande 22
1118 Costa São Paulo 10

Para isso, temos uma nova tabela chamada “Lista_de_Clientes_2024”. Esta tabela está vazia por enquanto.

Se quisermos inserir todos os registros da tabela “Lista_de_Clientes_2023” na nova tabela “Lista_de_Clientes_2024”, faremos o seguinte:

INSERT INTO Lista_de_Clientes_2024
SELECT * FROM Lista_de_Clientes_2023;
sql

Agora, todos os registros da antiga lista de clientes também estarão na nova lista de clientes:

Número do Cliente Nome Localidade Itens
1427 Souza São Paulo 13
1377 Sales Vitória 9
1212 Peters Vitória 15
1431 Barbosa Praia Grande 22
1118 Costa São Paulo 10

Transferir colunas selecionadas com SQL INSERT INTO SELECT

No entanto, pode ser que você queira transferir apenas algumas colunas específicas. Por exemplo, no nosso caso, a quantidade de itens pedidos pode não ser relevante para a nova tabela. Portanto, selecionamos agora apenas algumas colunas para transferência:

INSERT INTO Lista_de_Clientes_2024 (Número_do_Cliente, Nome, Localidade)
SELECT Número_do_Cliente, Nome, Localidade FROM Lista_de_Clientes_2023;
sql

Isso resulta na seguinte nova tabela:

Número do Cliente Nome Localidade Itens
1427 Souza São Paulo
1377 Sales Vitória
1212 Peters Vitória
1431 Barbosa Praia Grande
1118 Costa São Paulo

A coluna de Itens contém apenas entradas com o valor NULL.

Adicionar condições para transferência com SQL INSERT INTO SELECT

Além disso, você pode usar uma condição WHERE para copiar apenas linhas selecionadas. Para a nossa tabela, por exemplo, gostaríamos de transferir apenas clientes de Vitória. O código apropriado é o seguinte:

INSERT INTO Lista_de_Clientes_2024
SELECT * FROM Lista_de_Clientes_2023
WHERE Localidade = 'Vitória';
sql

Nossa nova tabela fica assim:

Número do Cliente Nome Localidade Itens
1377 Sales Vitória 9
1212 Peters Vitória 15

Alternativa a SQL INSERT INTO SELECT

Uma alternativa ao SQL INSERT INTO SELECT é o SELECT INTO. Ambas as instruções são usadas para transferir dados de uma tabela para outra e também fazem parte de um comando maior. Enquanto o SQL INSERT INTO SELECT requer uma tabela já existente para transferir os dados, o SELECT INTO cria uma nova tabela.

Dica

Você tem poder de escolha! Com o SQL Server Hosting da IONOS, você pode usar MSSQL, MySQL ou MariaDB. Alta performance, fortes recursos de segurança e atendimento personalizado são garantidos.

Este artigo foi útil?
Para melhorar a sua experiência, este site usa cookies. Ao acessar o nosso site, você concorda com nosso uso de cookies. Mais informações
Page top