Snowflakeへの参加

Snowflake SQL 入門

George Boorman

Senior Curriculum Manager, DataCamp

結合

  • INNER JOIN
  • OUTER JOIN(完全外部結合)
    • LEFT OUTER JOIN または LEFT JOIN
    • RIGHT OUTER JOIN または RIGHT JOIN
    • FULL OUTER JOIN または FULL JOIN
  • CROSS JOIN(完全外部結合)
  • 自己結合
  • NATURAL JOIN
  • LATERAL JOIN
Snowflake SQL 入門

ピザデータセット

Pizzaデータベースのスキーマ図

Snowflake SQL 入門

NATURAL JOIN

  • NATURAL JOIN 列を自動的に一致させ、重複する列を削除する

  • 構文:

    SELECT ...
    FROM <table_one> [
                       {
                         | NATURAL [ { LEFT | RIGHT | FULL } [ OUTER ] ]
                       }
                     ]
                     JOIN <table_two>
    [ ... ]
    
Snowflake SQL 入門

NATURAL JOIN

NATURAL JOINなし

SELECT * 
FROM pizzas AS p 
JOIN  pizza_type AS t 
    ON t.pizza_type_id = p.pizza_type_id

自然結合なしの結合結果

NATURAL JOIN付き

SELECT *
FROM pizzas AS p 
NATURAL JOIN pizza_type AS t

自然結合を用いた結合結果

Snowflake SQL 入門

NATURAL JOIN

NOT 許可済み

select *
FROM pizzas AS p 
NATURAL JOIN pizza_type AS t
    ON  t.pizza_type_id = p.pizza_type_id

構文エラー画像

Snowflake SQL 入門

NATURAL JOIN

$$

許可済み

  • WHERE
SELECT *
FROM pizzas AS p 
NATURAL JOIN pizza_type AS t
WHERE pizza_type_id = 'bbq_ckn'
Snowflake SQL 入門

LATERAL JOIN

  • LATERAL JOIN: サブクエリ内で FROM が、先行するテーブルまたはビューの列を参照できるようにします。

  • 構文:

`

  • left_hand_expression - テーブル、ビュー、またはサブクエリ

  • right_hand_expression - インラインビューまたはサブクエリ

Snowflake SQL 入門

LATERAL JOINをサブクエリで

SELECT 
    p.pizza_id, 
    lat.name, 
    lat.category 
FROM pizzas AS p,

LATERAL -- Keyword LATERAL ( SELECT * FROM pizza_type AS t
-- Referencing outer query column: p.pizza_type_id WHERE p.pizza_type_id = t.pizza_type_id
) AS lat
Snowflake SQL 入門

なぜ LATERAL JOIN?

SELECT 
    *
FROM orders AS o,
LATERAL (
   -- Subquery calculating total_spent
    SELECT 
        SUM(p.price * od.quantity) AS total_spent
    FROM order_details AS od
    JOIN pizzas AS p 
          ON od.pizza_id = p.pizza_id
    WHERE o.order_id = od.order_id
) AS t
ORDER BY o.order_id
Snowflake SQL 入門

練習しましょう!

Snowflake SQL 入門

Preparing Video For Download...