Joins ใน BigQuery

BigQuery เบื้องต้น

Matthew Forrest

Field CTO

การ join ข้อมูลใน BigQuery

  • INNER JOIN: มีค่าตรงกันในทั้งสองตาราง

  • LEFT JOIN: ทุกแถวในตาราง left จับคู่กับตาราง right

  • RIGHT JOIN: ทุกแถวในตาราง right จับคู่กับตาราง left

  • FULL JOIN: ทุกแถวจากทั้งสองตาราง ทั้งที่ตรงกันและไม่ตรงกัน

  • CROSS JOIN: ทุกแถวจับคู่กับทุกแถวจากทั้งสองตาราง

ภาพแสดง SQL joins แบบวิชวล

BigQuery เบื้องต้น

ตัวอย่างการใช้ joins ในชีวิตจริง

Customers: ตาราง left

Orders: ตาราง right

  • INNER JOIN: ดึงข้อมูลลูกค้าและออเดอร์ที่ตรงกัน

  • LEFT JOIN: แสดงลูกค้าทุกคน แม้ยังไม่เคยสั่งซื้อ

  • RIGHT JOIN: แสดงออเดอร์ทั้งหมด แม้ไม่มี customer ID

  • FULL JOIN: แสดงลูกค้าและออเดอร์ทั้งหมด แม้ยังไม่มีการเชื่อมโยงกัน

  • CROSS JOIN: จับคู่ทุกออเดอร์กับทุกลูกค้าโดยไม่มีเงื่อนไข

BigQuery เบื้องต้น

INNER JOIN

  • คืนเฉพาะผลลัพธ์ที่ตรงกันจากทั้งสองชุดข้อมูล
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        |
BigQuery เบื้องต้น

LEFT JOIN

  • คืนทุกแถวจากชุดข้อมูล LEFT
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                 |
BigQuery เบื้องต้น

RIGHT JOIN

  • คืนทุกแถวจากชุดข้อมูล RIGHT
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  |
BigQuery เบื้องต้น

OUTER JOIN

  • join แบบ "RIGHT-LEFT": ทุกแถวจากชุดข้อมูล RIGHT และ LEFT
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  |
BigQuery เบื้องต้น

SELF หรือ CROSS JOIN

  • Cartesian join — จับคู่ทุกแถวกับทุกแถว
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 |
BigQuery เบื้องต้น

Joins และ UNNEST

  • ใช้ join กับข้อมูลที่ 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         |
BigQuery เบื้องต้น

มาฝึกกันเถอะ!

BigQuery เบื้องต้น

Preparing Video For Download...