Sous-requêtes et expressions de table communes

Introduction à Snowflake SQL

George Boorman

Senior Curriculum Manager, DataCamp

Sous-requêtes

  • Requêtes imbriquées
  • Utilisées dans les clauses FROM, WHERE, HAVING ou SELECT
  • Exemple :
    SELECT column1 
    FROM table1 
    WHERE column1 = (SELECT column2 FROM table2 WHERE condition)
    
  • Types : sous-requêtes corrélées et non corrélées
Introduction à Snowflake SQL

Sous-requête non corrélée

-- La requête principale retourne les pizzas au prix maximal trouvé par la sous-requête
SELECT pizza_id
FROM pizzas
-- Sous-requête non corrélée qui repère le prix de pizza le plus élevé
WHERE price = (
    SELECT MAX(price)
    FROM pizzas
)
  • La sous-requête n'interagit pas avec la requête principale
Introduction à Snowflake SQL

Sous-requête corrélée

  • La sous-requête référence des colonnes de la requête principale
SELECT pt.name, 
       pz.price, 
       pt.category
FROM pizzas AS pz
JOIN pizza_type AS pt 
    ON pz.pizza_type_id = pt.pizza_type_id
WHERE pz.price = (
  -- Max du prix pour chaque catégorie de pizza
    SELECT MAX(p2.price) -- Prix max
    FROM pizzas AS p2
    WHERE -- Corrélée : utilise une colonne de la requête externe 
      p2.pizza_type_id = pz.pizza_type_id
)
Introduction à Snowflake SQL

Expressions de table communes

Syntaxe générale :

-- Mot-clé WITH
WITH cte1 AS ( -- Nom de l'ETC
        SELECT col_1, col_2
            FROM table1
    )
    ...
SELECT ... 
FROM cte1 -- Interroger l'ETC
;
Introduction à Snowflake SQL

Expressions de table communes

WITH max_price AS ( -- ETC nommée max_price
    SELECT pizza_type_id, 
           MAX(price) AS max_price
    FROM pizzas
    GROUP BY pizza_type_id
)

-- Requête principale SELECT pt.name, pz.price, pt.category FROM pizzas AS pz JOIN pizza_type AS pt ON pz.pizza_type_id = pt.pizza_type_id JOIN max_price AS mp -- Jonction avec l'ETC max_price ON pt.pizza_type_id = mp.pizza_type_id WHERE pz.price < mp.max_price -- Comparer le prix à la colonne max_price de l'ETC
Introduction à Snowflake SQL

ETC multiples

-- Définir plusieurs ETC séparées par des virgules
WITH cte1 AS (
    SELECT ...
    FROM ...
),

cte2 AS ( SELECT ... FROM ... )
-- Requête principale combinant les deux ETC SELECT ... FROM cte1 JOIN cte2 ON ... WHERE ...
Introduction à Snowflake SQL

Pourquoi utiliser des ETC ?

  • Gérer des opérations complexes
  • Modulaire
  • Lisible
  • Réutilisable
Introduction à Snowflake SQL

Passons à la pratique !

Introduction à Snowflake SQL

Preparing Video For Download...