Como Inserir Dados em Tabelas SQL Usando INSERT INTO com SELECT

Aprenda a usar o comando SQL INSERT INTO SELECT para inserir dados de forma eficiente. Descubra exemplos práticos e avançados, dicas, casos de uso e estratégias de otimização neste guia completo.

Compartilhe:

No universo dos bancos de dados relacionais, o comando INSERT INTO desempenha um papel crucial ao permitir a inserção de dados em tabelas. Uma das abordagens mais poderosas e versáteis para usar este comando é combiná-lo com SELECT, permitindo inserir dados de uma tabela (ou consulta) diretamente em outra. Este artigo detalha como aproveitar essa funcionalidade, explora casos de uso práticos e avança para cenários mais complexos.

O Básico do INSERT INTO SELECT

A sintaxe fundamental do comando INSERT INTO SELECT é a seguinte:

INSERT INTO table_name (column1, column2, ...)
SELECT column1, column2, ...
FROM another_table
WHERE condition;

Descrição dos elementos:

  • table_name: A tabela onde os dados serão inseridos.
  • column1, column2, ...: As colunas de destino, que devem corresponder em número e tipo aos dados selecionados.
  • another_table: A origem dos dados a serem inseridos.
  • WHERE condition: Opcional, define critérios para filtrar os dados a serem selecionados.

Exemplo Prático: Populando uma Tabela com Dados de Outra

Imagine que você tenha duas tabelas: employees e archived_employees. Sua tarefa é mover todos os funcionários inativos para a tabela de arquivamento.

Estrutura das tabelas:

CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    status VARCHAR(20)
);

CREATE TABLE archived_employees (
    id INT PRIMARY KEY,
    name VARCHAR(100)
);

Inserindo dados da tabela employees na tabela archived_employees:

INSERT INTO archived_employees (id, name)
SELECT id, name
FROM employees
WHERE status = 'inactive';

Este comando copia todos os funcionários inativos para a tabela de arquivamento.

Casos de Uso Comuns

  1. Migração de Dados Entre Tabelas
    • Usado em ETLs para transformar e mover dados entre sistemas.
  2. Backup ou Arquivamento
    • Copiar dados antigos para uma tabela de histórico.
  3. Integração de Dados
    • Combinar informações de diferentes fontes em uma tabela central.
  4. Conversão de Estruturas
    • Reorganizar dados de uma tabela para uma nova estrutura.

Exemplos Avançados

1. Inserção com Transformação de Dados

É possível transformar os dados antes de inseri-los na tabela de destino.

Certificado MEC

Domine Bancos de Dados como um
Engenheiro de Dados de Elite

SQL, NoSQL, BigQuery, Databricks, SSIS + Python
Saia do zero e conquiste R$11.000/mês em 6 meses.
200h+ de projetos reais com ferramentas do Google, Amazon e Netflix.

Garanta Sua Vaga com 7 Dias de Garantia

Exemplo: Criar uma tabela com nomes em maiúsculas.

CREATE TABLE uppercase_employees (
    id INT PRIMARY KEY,
    name_upper VARCHAR(100)
);

INSERT INTO uppercase_employees (id, name_upper)
SELECT id, UPPER(name)
FROM employees;

O uso da função UPPER() converte os nomes para letras maiúsculas antes da inserção.

2. Inserção Condicional com Subconsultas

Você pode usar subconsultas para condicionar a inserção de dados.

Exemplo: Inserir apenas funcionários cujos gerentes estão ativos.

INSERT INTO active_manager_employees (id, name)
SELECT e.id, e.name
FROM employees e
WHERE e.manager_id IN (
    SELECT id FROM employees WHERE status = 'active'
);

3. Inserção com JOIN

Combinar dados de múltiplas tabelas antes da inserção é uma técnica poderosa.

Exemplo: Criar uma tabela de relatórios contendo informações de funcionários e departamentos.

CREATE TABLE employee_reports (
    employee_id INT,
    employee_name VARCHAR(100),
    department_name VARCHAR(100)
);

INSERT INTO employee_reports (employee_id, employee_name, department_name)
SELECT e.id, e.name, d.name
FROM employees e
JOIN departments d ON e.department_id = d.id;

Este comando combina dados de employees e departments para popular a tabela employee_reports.

4. Inserção com Funções de Janela

As funções de janela permitem cálculos avançados no SELECT.

Exemplo: Inserir o ranking de salários em uma tabela.

CREATE TABLE employee_salaries (
    employee_id INT,
    salary DECIMAL(10, 2),
    salary_rank INT
);

INSERT INTO employee_salaries (employee_id, salary, salary_rank)
SELECT id, salary,
       RANK() OVER (ORDER BY salary DESC)
FROM employees;

A função RANK() calcula a posição do salário de cada funcionário em relação aos demais.

Dicas e Boas Práticas

  1. Validação de Tipos de Dados
    • Certifique-se de que os tipos de dados das colunas de origem e destino sejam compatíveis.
  2. Cuidados com Restrições
    • Verifique se as tabelas têm restrições, como PRIMARY KEY ou FOREIGN KEY, que possam impedir a inserção.
  3. Uso de Transações
    • Para grandes volumes de dados, utilize transações para garantir consistência:
BEGIN TRANSACTION;

INSERT INTO table_name
SELECT ...;

COMMIT;

Testes com Cópias

  • Antes de executar o comando em produção, teste-o em tabelas de cópia para evitar perdas de dados.

Desafios e Considerações Avançadas

1. Inserções em Grandes Volumes

Ao inserir milhões de registros, pode ocorrer degradação no desempenho. Algumas estratégias incluem:

  • Dividir a inserção em lotes (BATCH INSERT).
  • Desativar índices temporariamente.
  • Usar instruções como INSERT IGNORE ou ON CONFLICT em bancos de dados como MySQL e PostgreSQL, respectivamente, para evitar duplicatas.

2. Gerenciamento de Duplicatas

Evitar duplicatas ao inserir registros é essencial. No PostgreSQL:

INSERT INTO target_table (col1, col2)
SELECT col1, col2
FROM source_table
ON CONFLICT (unique_column) DO NOTHING;

3. Inserção em Várias Tabelas

Para inserir dados em múltiplas tabelas simultaneamente, use TRIGGERS ou STORED PROCEDURES.

Conclusão

O comando INSERT INTO SELECT é uma ferramenta poderosa que vai além do básico, permitindo movimentar, transformar e gerenciar dados em escala. Este artigo abordou desde os fundamentos até casos avançados, como uso de funções de janela e JOINs. Dominar este comando é essencial para qualquer profissional que lida com bancos de dados, pois ele oferece flexibilidade e eficiência na manipulação de dados.

Próximos passos:

  • Pratique os exemplos no seu banco de dados.
  • Explore outros operadores e funções SQL para aprimorar suas consultas.
  • Combine INSERT INTO SELECT com scripts e automações para casos de uso avançados.

Com isso, você estará preparado para enfrentar desafios em cenários reais!

VAI GOSTAR: O que é normalização de banco de dados? – Descubra tudo sobre a normalização de banco de dados, incluindo as explicações detalhadas da 5NF e 2NF com exemplos práticos. Aprenda como melhorar a organização e a eficiência dos seus dados e otimize seus sistemas de forma profissional.

LEITURAS COMPLEMENTARES

Aqui está uma lista de fontes confiáveis e abrangentes para aprofundar o aprendizado sobre SQL, bancos de dados e a aplicação avançada de comandos como INSERT INTO SELECT:

1. Documentação Oficial de Bancos de Dados

As documentações oficiais são sempre o melhor ponto de partida, pois apresentam detalhes completos sobre a sintaxe, funções e práticas recomendadas.

2. Livros Recomendados

Para quem gosta de se aprofundar com leitura, livros oferecem uma visão mais técnica e estruturada.

3. Ambientes Práticos

A prática é essencial para dominar SQL. Aqui estão algumas ferramentas para experimentar e executar consultas.

4. Certificações

Obter certificações pode validar seu conhecimento e abrir portas no mercado de trabalho.

  • Microsoft Certified: Azure Data Engineer Associate
  • Oracle Database SQL Certified Associate
  • Google Cloud Professional Data Engineer
  • AWS Certified Database – Specialty

VAI GOSTAR:

Compartilhe:

Ramos da Informática
Ramos da Informáticahttps://ramosdainformatica.com.br
Ramos da Informática é um hub de comunidade sobre linguagens de programação, banco de dados, DevOps, Internet das Coisas, tecnologia da indústria 4.0, Cyber Segurança e Startups.
spot_img

Carreira no exterior

🔥 Ativa

Vagas remotas no exterior + inglês diário

Comunidade #JNG: vagas frescas, mentoria e prática de entrevista.

💼
1000+ vagas/dia
🗣️
Inglês Seg-Sex
👥
Mentoria semanal
24h
Suporte
100%
Remoto
🚀 Entrar na Comunidade
🔒 Seguro e confiável
BLACK FRIDAY EXCLUSIVA Rocketseat ÚLTIMAS VAGAS
ATÉ 80% OFF em Ignite Pro, Discover, NLW Expert, mentoria 1:1, projetos reais + certificado reconhecido — transforme sua carreira em 6 meses ou menos!
QUERO MINHA VAGA AGORA