Dans la leçon précédente, nous avons vu la création de tables avec CREATE TABLE. Examinons maintenant un type particulier de table : les tables temporaires. Elles permettent de stocker des données intermédiaires au sein d’une session ou d’une transaction et sont souvent utilisées dans les requêtes analytiques, les processus ETL et les traitements de données en plusieurs étapes.
Contrairement aux tables classiques, les tables temporaires ne sont pas destinées au stockage permanent des données. Elles sont créées pour une durée limitée, puis supprimées automatiquement ou rendues indisponibles à la fin de la session.
Une table temporaire est une table créée pour stocker temporairement des données pendant le travail d’un utilisateur ou l’exécution d’un script.
En général, ces tables :
Dans de nombreux SGBD, les tables temporaires sont créées avec le mot-clé TEMPORARY ou TEMP.
Une des formes courantes de création d’une table temporaire est la suivante :
CREATE TEMPORARY TABLE table_name (
column1 data_type,
column2 data_type,
column3 data_type
);
Ensuite, vous pouvez travailler avec la table temporaire presque comme avec une table classique : insérer des données, les lire, les mettre à jour et les supprimer.
Supposons que nous voulions enregistrer la liste des clients ayant effectué plus de 30 paiements :
CREATE TEMPORARY TABLE active_customers AS
SELECT customer_id, COUNT(*) AS payment_count
FROM payment
GROUP BY customer_id
HAVING COUNT(*) > 30;
Nous pouvons maintenant utiliser cette table temporaire dans les requêtes suivantes :
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;
Résultat : nous obtenons la liste des clients actifs et pouvons réutiliser l’ensemble de données déjà préparé sans relancer l’agrégation initiale.
Même si les tables temporaires et les tables classiques se ressemblent par leur structure, il existe plusieurs différences importantes.
Les tables temporaires sont utiles si :
Par exemple, vous pouvez d’abord constituer une table temporaire avec les films souhaités, puis calculer des métriques uniquement sur cet ensemble.
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;
Résultat : la logique est divisée en deux étapes claires, préparation des données puis analyse.
Dans certains cas, on peut utiliser un CTE (WITH) au lieu d’une table temporaire. La différence est la suivante :
Si le résultat n’est nécessaire qu’une seule fois, un CTE est souvent plus simple. S’il est nécessaire à plusieurs étapes, une table temporaire est généralement plus pratique.
Lors de l’utilisation des tables temporaires, il est utile de retenir quelques règles :
TEMPORARY TABLE peut varier.Bien utilisée, une table temporaire rend un SQL complexe plus lisible et plus facile à maintenir.
Imaginons que nous devions trouver les clients qui ont loué des films de la catégorie Action, puis construire un rapport séparé pour eux.
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;
Cette approche est particulièrement pratique si, après cette liste, vous devez exécuter plusieurs autres requêtes analytiques.
Points clés de cette leçon :
Dans la prochaine leçon, nous verrons en quoi les tables temporaires diffèrent des vues et dans quels cas il vaut mieux utiliser chacun de ces outils.