JOIN trong BigQuery

Giới thiệu về BigQuery

Matthew Forrest

Field CTO

Kết hợp dữ liệu trong BigQuery

  • INNER JOIN: Giá trị xuất hiện ở cả hai bảng.

  • LEFT JOIN: Mọi hàng ở bảng trái, khớp với bảng phải.

  • RIGHT JOIN: Mọi hàng ở bảng phải, khớp với bảng trái.

  • FULL JOIN: Mọi hàng từ cả hai bảng, gồm khớp và không khớp.

  • CROSS JOIN: Mỗi hàng ghép với mọi hàng của hai bảng.

Hình minh họa trực quan các kiểu JOIN trong SQL

Giới thiệu về BigQuery

Ví dụ thực tế về JOIN

Customers: bảng trái

Orders: bảng phải

  • INNER JOIN: Khách hàng khớp với đơn hàng

  • LEFT JOIN: Hiện mọi khách hàng, kể cả chưa có đơn

  • RIGHT JOIN: Hiện mọi đơn hàng, kể cả thiếu customer_id

  • FULL JOIN: Hiện mọi khách hàng và mọi đơn, kể cả chưa tương tác

  • CROSS JOIN: Ghép mọi đơn với mọi khách hàng, không điều kiện

Giới thiệu về BigQuery

INNER JOIN

  • Chỉ trả về các hàng khớp ở cả hai tập dữ liệu
SELECT
  c.customer_id, s.product_name
FROM customers c
-- The INNER keyword is optional
JOIN sales_data s
ON c.customer_id = s.customer_id;
| customer_id | product_name         |
|-------------|----------------------|
| 1           | Bluetooth Headphones |
| 2           | Running Shoes        |
Giới thiệu về BigQuery

LEFT JOIN

  • Trả về mọi hàng từ tập dữ liệu BÊN TRÁI
SELECT
  c.customer_id, s.product_name
FROM customers c
LEFT JOIN sales_data s
ON c.customer_id = s.customer_id;
| customer_id | product_name         |
|-------------|----------------------|
| 1           | Bluetooth Headphones |
| 2           | Running Shoes        |
| 3           | null                 |
Giới thiệu về BigQuery

RIGHT JOIN

  • Trả về mọi hàng từ tập dữ liệu BÊN PHẢI
SELECT
  c.customer_id, s.product_name
FROM customers c
RIGHT JOIN sales_data s
ON c.customer_id = s.customer_id;
| customer_id | product_name         |
|-------------|----------------------|
| 1           | Bluetooth Headphones |
| 2           | Running Shoes        |
| null        | External Microphone  |
Giới thiệu về BigQuery

OUTER JOIN

  • "RIGHT-LEFT" join: mọi hàng từ cả tập BÊN PHẢI và BÊN TRÁI
SELECT
  c.customer_id, s.product_name
FROM customers c
OUTER JOIN sales_data s
ON c.customer_id = s.customer_id;
| customer_id | product_name         |
|-------------|----------------------|
| 1           | Bluetooth Headphones |
| 2           | Running Shoes        |
| 3           | null                 |
| null        | External Microphone  |
Giới thiệu về BigQuery

SELF hoặc CROSS JOIN

  • Join Descartes: mỗi hàng kết hợp với mọi hàng
SELECT
  c.customer_id,
  s.product_name,

-- Adding table names separated 
-- by a comma is a CROSS JOIN
-- Order is determined by the
-- left table, here "customers"
FROM customers c, sales_data s;
| customer_id | product_name         |
|-------------|----------------------|
| 1           | Bluetooth Headphones |
| 1           | null                 |
| 2           | Bluetooth Headphones |
| 2           | null                 |
| 3           | null                 |
| 3           | Bluetooth Headphones |
Giới thiệu về BigQuery

JOIN và UNNEST

  • Cũng dùng để join dữ liệu sau khi UNNEST
SELECT
  c.customer_id,
  payments.method
FROM customers c, 
UNNEST(
  customers.payment_methods
) payments;
| customer_id | product_name |
|-------------|--------------|
| 1           | Visa         |
| 1           | Mastercard   |
| 1           | Venmo        |
| 1           | Paypal       |
| 2           | Amex         |
| 2           | Visa         |
Giới thiệu về BigQuery

Ayo berlatih!

Giới thiệu về BigQuery

Preparing Video For Download...