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.
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:
A condição WHERE
é opcional.
Se você deseja transferir apenas colunas selecionadas, a sintaxe apropriada é:
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:
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:
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:
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.
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.