Podzapytania i wspólne wyrażenia tabelowe

Wprowadzenie do Snowflake SQL

George Boorman

Senior Curriculum Manager, DataCamp

Podzapytania

  • Zagnieżdżone zapytania
  • Używane w klauzulach FROM, WHERE, HAVING lub SELECT
  • Przykład:
    SELECT column1 
    FROM table1 
    WHERE column1 = (SELECT column2 FROM table2 WHERE condition)
    
  • Typy: podzapytania skorelowane i nieskorelowane
Wprowadzenie do Snowflake SQL

Podzapytanie nieskorelowane

-- Main query returns pizzas priced at the maximum value found in the subquery
SELECT pizza_id
FROM pizzas
-- Uncorrelated subquery that identifies the highest pizza price
WHERE price = (
    SELECT MAX(price)
    FROM pizzas
)
  • Podzapytanie nie odwołuje się do zapytania głównego
Wprowadzenie do Snowflake SQL

Podzapytanie skorelowane

  • Podzapytanie odwołuje się do kolumn z zapytania głównego
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 = (
  -- Identifies max price for each pizza category
    SELECT MAX(p2.price) -- Max price
    FROM pizzas AS p2
    WHERE -- Correlated: uses outer query column 
      p2.pizza_type_id = pz.pizza_type_id
)
Wprowadzenie do Snowflake SQL

Wspólne wyrażenia tabelowe

Ogólna składnia:

-- WITH keyword
WITH cte1 AS ( -- CTE name
        SELECT col_1, col_2
            FROM table1
    )
    ...
SELECT ... 
FROM cte1 -- Query CTE
;
Wprowadzenie do Snowflake SQL

Wspólne wyrażenia tabelowe

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

-- Main query 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 -- Joining with CTE max_price ON pt.pizza_type_id = mp.pizza_type_id WHERE pz.price < mp.max_price -- Compare the price with max_price CTE column
Wprowadzenie do Snowflake SQL

Wiele CTE

-- Define multiple CTEs separated by commas
WITH cte1 AS (
    SELECT ...
    FROM ...
),

cte2 AS ( SELECT ... FROM ... )
-- Main query combining both CTEs SELECT ... FROM cte1 JOIN cte2 ON ... WHERE ...
Wprowadzenie do Snowflake SQL

Dlaczego warto używać CTE?

  • Zarządzanie złożonymi operacjami
  • Modularność
  • Czytelność
  • Wielokrotne użycie
Wprowadzenie do Snowflake SQL

Czas na ćwiczenia!

Wprowadzenie do Snowflake SQL

Preparing Video For Download...