JOIN trong Snowflake

Nhập môn Snowflake SQL

George Boorman

Senior Curriculum Manager, DataCamp

CÁC LOẠI JOIN

  • INNER JOIN
  • OUTER JOINS
    • LEFT OUTER JOIN hoặc LEFT JOIN
    • RIGHT OUTER JOIN hoặc RIGHT JOIN
    • FULL OUTER JOIN hoặc FULL JOIN
  • CROSS JOINS
  • SELF JOINS
  • NATURAL JOIN
  • LATERAL JOIN
Nhập môn Snowflake SQL

Bộ dữ liệu Pizza

Sơ đồ lược đồ cơ sở dữ liệu Pizza

Nhập môn Snowflake SQL

NATURAL JOIN

  • NATURAL JOIN tự động khớp cột và loại bỏ cột trùng lặp

Cú pháp:

SELECT ...
FROM <table_one> [
                     {
                       | NATURAL [ { LEFT | RIGHT | FULL } [ OUTER ] ]
                     }
                   ]
                   JOIN <table_two>
[ ... ]
Nhập môn Snowflake SQL

NATURAL JOIN

Không dùng NATURAL JOIN

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

Kết quả join không dùng natural join

Dùng NATURAL JOIN

SELECT *
FROM pizzas AS p 
NATURAL JOIN pizza_type AS t

  Kết quả join với natural join

Nhập môn Snowflake SQL

NATURAL JOIN

 

KHÔNG HỢP LỆ

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

Ảnh lỗi cú pháp

Nhập môn Snowflake SQL

NATURAL JOIN

$$

HỢP LỆ

  • Mệnh đề WHERE
SELECT *
FROM pizzas AS p 
NATURAL JOIN pizza_type AS t
WHERE pizza_type_id = 'bbq_ckn'
Nhập môn Snowflake SQL

LATERAL JOIN

  • LATERAL JOIN: cho phép một subquery trong FROM tham chiếu cột từ các bảng hoặc view đứng trước.

Cú pháp:

SELECT ...
FROM <left_hand_expression> , -- 
LATERAL 
(<right_hand_expression>)

  • left_hand_expression - Bảng, view, hoặc subquery

  • right_hand_expression - Inline view hoặc subquery

Nhập môn Snowflake SQL

LATERAL JOIN với subquery

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

LATERAL -- Từ khóa LATERAL ( SELECT * FROM pizza_type AS t
-- Tham chiếu cột của truy vấn ngoài: p.pizza_type_id WHERE p.pizza_type_id = t.pizza_type_id
) AS lat
Nhập môn Snowflake SQL

Vì sao dùng LATERAL JOIN?

SELECT 
    *
FROM orders AS o,
LATERAL (
   -- Subquery tính 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
Nhập môn Snowflake SQL

Ayo berlatih!

Nhập môn Snowflake SQL

Preparing Video For Download...