Bonjour à tous ! Que vous soyez data analyst, data engineer ou data scientist, connaître les tables dérivées et les CTE (Common Table Expressions) est indispensable. Il est important de savoir les utiliser.

Qu'est-ce qu'une table dérivée (Derived Table ou DT) ?

Pour faire simple et sans trop compliquer les choses, une table dérivée, c’est une sous-requête dans la clause FROM qui te permet d’extraire et de manipuler un sous-ensemble de données comme s’il s’agissait d’une table, mais uniquement à l’intérieur de cette requête.

Par exemple, tu possèdes une librairie et tu veux analyser les ventes de livres dont le prix est supérieur à 20 €.

SELECT *
FROM (
  SELECT book_id, title
  FROM sales_records
  WHERE price > 20
) AS ExpensiveBooks;

Ici, ExpensiveBooks est une table dérivée qui contient uniquement les livres vendus à plus de 20 €.

Common Table Expressions (CTE)

Les CTE sont comme des marque-pages dans tes requêtes. Tu donnes un nom à un bloc de requête, puis tu peux le réutiliser plus bas. C’est un peu un post-it dans un gros guide SQL, et c'est trés utilises dans les requêtes récursives et le plus important est de rendre la lecture de la requête plus lisible

Reprenons le même exemple de la librairie :

WITH ExpensiveBooks AS (
    SELECT book_id, title
    FROM sales_records
    WHERE price > 20
)
SELECT *
FROM ExpensiveBooks;

C'est plus lisible et plus facile à lire qu'une table dérivée.

Un autre exemple, tu veux trouver tous les livres plus chers que le prix moyen des livres de ton magasin. Une CTE peut d’abord calculer ce prix moyen, puis l’utiliser pour filtrer les livres.

WITH AveragePrice AS (
  SELECT AVG(price) AS AvgPrice
  FROM sales_records
)
SELECT title
FROM sales_records
WHERE price > (SELECT AvgPrice FROM AveragePrice);

AveragePrice est une CTE qui calcule le prix moyen, ensuite utilisée pour trouver les livres plus chers que cette moyenne.

On peut faire la même chose avec les deux méthodes, mais personnellement, j'ai tendance à privilégier les CTE dès que la requête devient un peu complexe ou qu’il y a plusieurs étapes, parce que ça améliore fortement la lisibilité et la maintenance, surtout quand je dois la relire ou la modifier plusieurs mois plus tard.😉