Subquery's en Common Table Expressions

Introductie tot Snowflake SQL

George Boorman

Senior Curriculum Manager, DataCamp

Subquery's

  • Geneste queries
  • Gebruikt in FROM, WHERE, HAVING of SELECT
  • Voorbeeld:
    SELECT column1 
    FROM table1 
    WHERE column1 = (SELECT column2 FROM table2 WHERE condition)
    
  • Types: Gecorreleerde en niet-gecorreleerde subquery's
Introductie tot Snowflake SQL

Niet-gecorreleerde subquery

-- Hoofdquery geeft pizza's met de hoogste prijs uit de subquery
SELECT pizza_id
FROM pizzas
-- Niet-gecorreleerde subquery die de hoogste pizzaprijs vindt
WHERE price = (
    SELECT MAX(price)
    FROM pizzas
)
  • Subquery staat los van de hoofdquery
Introductie tot Snowflake SQL

Gecorreleerde subquery

  • Subquery verwijst naar kolommen uit de hoofdquery
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 = (
  -- Bepaalt max prijs per pizzacategorie
    SELECT MAX(p2.price) -- Max prijs
    FROM pizzas AS p2
    WHERE -- Gecorreleerd: gebruikt buitenste querykolom 
      p2.pizza_type_id = pz.pizza_type_id
)
Introductie tot Snowflake SQL

Common Table Expressions

Algemene syntax:

-- WITH-keywoord
WITH cte1 AS ( -- CTE-naam
        SELECT col_1, col_2
            FROM table1
    )
    ...
SELECT ... 
FROM cte1 -- Query CTE
;
Introductie tot Snowflake SQL

Common Table Expressions

WITH max_price AS ( -- CTE genaamd max_price
    SELECT pizza_type_id, 
           MAX(price) AS max_price
    FROM pizzas
    GROUP BY pizza_type_id
)

-- Hoofdquery 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 -- Join met CTE max_price ON pt.pizza_type_id = mp.pizza_type_id WHERE pz.price < mp.max_price -- Vergelijk met kolom max_price uit CTE
Introductie tot Snowflake SQL

Meerdere CTE's

-- Meerdere CTE's, gescheiden door komma's
WITH cte1 AS (
    SELECT ...
    FROM ...
),

cte2 AS ( SELECT ... FROM ... )
-- Hoofdquery die beide CTE's combineert SELECT ... FROM cte1 JOIN cte2 ON ... WHERE ...
Introductie tot Snowflake SQL

Waarom CTE's gebruiken?

  • Complexe bewerkingen beheren
  • Modulair
  • Leesbaar
  • Herbruikbaar
Introductie tot Snowflake SQL

Laten we oefenen!

Introductie tot Snowflake SQL

Preparing Video For Download...