Na lição anterior, falamos sobre a criação de tabelas com CREATE TABLE. Agora vamos analisar um tipo especial de tabela: as tabelas temporárias. Elas ajudam a armazenar dados intermediários dentro de uma sessão ou transação e são usadas com frequência em consultas analíticas, processos de ETL e processamento de dados em várias etapas.
Diferentemente das tabelas comuns, as tabelas temporárias não são destinadas ao armazenamento permanente de dados. Elas são criadas por um período limitado e depois são removidas automaticamente ou ficam indisponíveis após o encerramento da sessão.
Uma tabela temporária é uma tabela criada para armazenar dados temporariamente durante o trabalho do usuário ou a execução de um script.
Normalmente, essas tabelas:
Em muitos SGBDs, tabelas temporárias são criadas com a palavra-chave TEMPORARY ou TEMP.
Uma das formas mais comuns de criar uma tabela temporária é a seguinte:
CREATE TEMPORARY TABLE table_name (
column1 data_type,
column2 data_type,
column3 data_type
);
Depois disso, você pode trabalhar com a tabela temporária quase da mesma forma que com uma tabela comum: inserir dados, consultar, atualizar e remover.
Suponha que queremos salvar a lista de clientes que fizeram mais de 30 pagamentos:
CREATE TEMPORARY TABLE active_customers AS
SELECT customer_id, COUNT(*) AS payment_count
FROM payment
GROUP BY customer_id
HAVING COUNT(*) > 30;
Agora podemos usar essa tabela temporária nas consultas seguintes:
SELECT ac.customer_id, ac.payment_count, c.first_name, c.last_name
FROM active_customers ac
JOIN customer c ON ac.customer_id = c.customer_id
ORDER BY ac.payment_count DESC;
Resultado: obtemos a lista de clientes ativos e podemos reutilizar o conjunto de dados já preparado sem executar novamente a agregação original.
Embora tabelas temporárias e comuns sejam parecidas em estrutura, existem algumas diferenças importantes.
Vale usar tabelas temporárias quando:
Por exemplo, primeiro podemos montar uma tabela temporária com os filmes desejados e depois calcular métricas apenas para eles.
CREATE TEMPORARY TABLE expensive_films AS
SELECT film_id, title, rental_rate
FROM film
WHERE rental_rate >= 4.00;
SELECT COUNT(*) AS film_count, AVG(rental_rate) AS avg_rate
FROM expensive_films;
Resultado: a lógica é separada em duas etapas claras, preparação dos dados e análise.
Em alguns casos, pode-se usar um CTE (WITH) em vez de uma tabela temporária. A diferença é que:
Se o resultado for necessário apenas uma vez, o CTE costuma ser mais simples. Se ele for necessário em várias etapas, a tabela temporária normalmente é mais conveniente.
Ao trabalhar com tabelas temporárias, é útil lembrar algumas regras:
TEMPORARY TABLE pode variar.Quando bem usada, uma tabela temporária torna um SQL complexo mais legível e gerenciável.
Imagine que precisamos encontrar clientes que alugaram filmes da categoria Action e depois montar um relatório separado para eles.
CREATE TEMPORARY TABLE action_customers AS
SELECT DISTINCT r.customer_id
FROM rental r
JOIN inventory i ON r.inventory_id = i.inventory_id
JOIN film_category fc ON i.film_id = fc.film_id
JOIN category c ON fc.category_id = c.category_id
WHERE c.name = 'Action';
SELECT ac.customer_id, cu.first_name, cu.last_name
FROM action_customers ac
JOIN customer cu ON ac.customer_id = cu.customer_id
ORDER BY cu.last_name, cu.first_name;
Essa abordagem é especialmente útil se, após essa lista, você precisar executar várias consultas analíticas adicionais.
Principais conclusões desta lição:
Na próxima lição, veremos como tabelas temporárias diferem de views e em quais casos é melhor usar cada uma dessas ferramentas.