MDBF Logo MDBF

Create Table SQL As Select: Guia Completo e Otimizado

Artigos

No universo do gerenciamento de bancos de dados relacionais, a linguagem SQL (Structured Query Language) desempenha um papel fundamental na manipulação e consulta de dados. Uma das operações mais essenciais para desenvolvedores, analistas de dados e administradores é a criação de novas tabelas a partir de dados existentes. Nesse contexto, o comando CREATE TABLE AS SELECT (ou CREATE TABLE ... AS SELECT) surge como uma ferramenta poderosa, permitindo não apenas criar uma nova tabela, mas também populá-la de forma eficiente e direta com os resultados de uma consulta SQL.

Se você deseja entender profundamente como usar o comando CREATE TABLE AS SELECT, suas aplicações, boas práticas e dicas de otimização, este guia completo foi elaborado especialmente para você. Aqui, abordaremos desde a sintaxe básica até exemplos avançados, além de responder às dúvidas mais frequentes sobre o tema.

create-table-sql-as-select

O que é o comando CREATE TABLE AS SELECT?

O comando CREATE TABLE AS SELECT combina duas operações: a criação de uma nova tabela e a inserção de dados resultantes de uma consulta SELECT. Essa abordagem permite criar tabelas derivadas de outras fontes de dados, facilitando tarefas como backup, criação de tabelas temporárias, arquivamento de informações, entre outros usos.

Vantagens de usar CREATE TABLE AS SELECT

  • Rapidez na criação de tabelas derivadas: Você combina a criação e a inserção de dados em uma única operação.
  • Facilidade de copiar estruturas e dados: Permite criar cópias de tabelas existentes ou de resultados de consultas específicas.
  • Aplicação em cenários de ETL (Extract, Transform, Load): Ideal para operações de transformação de dados.

Sintaxe básica do CREATE TABLE AS SELECT

A sintaxe básica do comando é:

CREATE TABLE nome_da_tabela ASSELECT colunasFROM tabela_origemWHERE condição;

Exemplo simples

CREATE TABLE clientes_ativos ASSELECT id, nome, emailFROM clientesWHERE status = 'ativo';

Nesse exemplo, uma nova tabela chamada clientes_ativos será criada contendo apenas os clientes ativos.

Como usar CREATE TABLE AS SELECT na prática

1. Criando uma nova tabela a partir de uma consulta simples

Imagine que você tem uma tabela vendas e deseja criar uma tabela com vendas do mês de janeiro:

CREATE TABLE vendas_janeiro ASSELECT *FROM vendasWHERE data_venda BETWEEN '2023-01-01' AND '2023-01-31';

2. Criando uma tabela com estrutura similar, mas sem dados

Se desejar criar a estrutura da tabela, mas sem inserir dados, pode usar uma combinação de comandos, dependendo do sistema de gerenciamento de banco de dados, ou usar uma abordagem específica. No PostgreSQL, por exemplo:

CREATE TABLE nova_tabela ASSELECT * FROM tabela_original WHERE 1=0;

Assim, a tabela nova_tabela será criada com a mesma estrutura da tabela original, porém vazia.

3. Criando uma tabela com colunas específicas e dados filtrados

CREATE TABLE produtos_topVendas ASSELECT id_produto, nome, total_vendasFROM produtosWHERE total_vendas > 1000;

4. Combinando várias tabelas usando JOIN

CREATE TABLE clientes_pedidos ASSELECT c.id, c.nome, p.numero_pedidoFROM clientes cJOIN pedidos p ON c.id = p.cliente_idWHERE p.data_pedido >= '2023-01-01';

Considerações importantes e boas práticas

Tipos de dados e propriedades

Ao usar CREATE TABLE AS SELECT, a nova tabela herda os tipos de dados das colunas resultantes da consulta. No entanto, ela não copia restrições, índices ou chaves primárias por padrão.

Como criar tabelas com estruturas completas

Se precisar criar uma tabela com as mesmas restrições e índices da original, além dos dados, recomenda-se usar comandos específicos do seu SGBD ou ferramentas de administração, como o pg_dump no PostgreSQL, ou o CREATE TABLE LIKE no MySQL.

Incrementando o desempenho com índices

Para melhorar a performance das consultas posteriores, considere criar índices nas colunas mais utilizadas após criar a tabela.

CREATE INDEX idx_nome ON produtos(nome);

Comparando CREATE TABLE AS SELECT com outros métodos de criação

MétodoDescriçãoHerda dados?Herda restrições?
CREATE TABLE ... AS SELECTCria tabela e insere resultados da consultaSimNão
CREATE TABLE LIKE (MySQL)Cria tabela com estrutura e restrições existentesNãoSim
INSERT INTO ... SELECTInsere dados em tabela já existenteNãoJá existente

(fonte: MySQL Documentation)

Tabela comparativa: Exemplos de comandos

SituaçãoComandoResultado
Criar tabela com estrutura similar, sem dadosCREATE TABLE nova_tabela LIKE tabela_existente; (MySQL)Estrutura idêntica, vazia
Criar tabela a partir de consultaCREATE TABLE nova_tabela AS SELECT * FROM tabela_existente;Nova tabela com dados da consulta

Perguntas frequentes sobre CREATE TABLE AS SELECT

1. O comando CREATE TABLE AS SELECT copia índices e restrições?

Resposta: Não. Essa operação copia apenas a estrutura dos dados, ou seja, as colunas e seus tipos, além dos valores resultantes da consulta. Restrições, chaves primárias, índices e outros objetos de banco de dados não são herdados automaticamente. Para isso, é necessário criar esses objetos separadamente.

2. Posso criar uma tabela temporária usando CREATE TABLE AS SELECT?

Resposta: Sim. Você pode criar tabelas temporárias, porém, o comando varia dependendo do sistema de banco de dados. No PostgreSQL:

CREATE TEMP TABLE temp_tabela ASSELECT * FROM tabela;

3. É possível criar uma tabela com uma estrutura muito semelhante, mas com modificações?

Resposta: Sim. Você pode criar a tabela com CREATE TABLE ... AS SELECT e, posteriormente, alterar sua estrutura com comandos como ALTER TABLE para adicionar ou remover colunas, criar índices, restrições, etc.

Conclusão

O comando CREATE TABLE AS SELECT é uma ferramenta indispensável para quem trabalha com bancos de dados relacionais. Sua versatilidade permite criar cópias de tabelas, gerar tabelas derivadas de consultas e facilitar processos de transformação de dados de forma rápida e eficiente.

Para aproveitar ao máximo essa funcionalidade, é fundamental compreender suas limitações e complementar sua utilização com a criação de índices, restrições e a manutenção adequada da estrutura de tabelas. Além disso, conhecimentos adicionais sobre as variantes do comando em diferentes SGBDs ampliarão sua eficiência no desenvolvimento e na administração de bancos de dados.

Perguntas frequentes adicionais

Como otimizar o uso do CREATE TABLE AS SELECT em bancos de dados grandes?

Para bancos de dados de grande porte, recomenda-se:

  • Utilizar CREATE TABLE AS SELECT durante períodos de menor movimento.
  • Criar índices após a criação da tabela para evitar overhead durante a inserção.
  • Utilizar particionamento de tabelas para gerenciar grandes volumes de dados.

É possível criar uma tabela com partições usando CREATE TABLE AS SELECT?

Sim, mas a sintonia entre criação de tabelas particionadas e uso de CREATE TABLE AS SELECT depende do sistema de gerenciamento de banco de dados. Em alguns SGBDs, você primeiro cria a tabela particionada e depois popula com INSERT INTO SELECT.

Referências

Esperamos que este guia completo tenha esclarecido todas as suas dúvidas sobre o comando CREATE TABLE AS SELECT. Aproveite para aplicar essas técnicas em seus projetos de banco de dados, otimizando seus processos e garantindo maior eficiência na manipulação de dados!