Day 6 - Intermediate: Joins
Bối cảnh: Hệ thống E-commerce (Thương mại điện tử)
1. What are joins?
Joins dùng để kết hợp dữ liệu từ hai hoặc nhiều bảng dựa trên một điều kiện liên quan.
Trong hệ thống E-commerce, chúng ta thường cần kết hợp dữ liệu từ các bảng như orders, customers, và products để phân tích toàn diện.
Ví dụ: Kết hợp bảng orders và customers để biết thông tin khách hàng của mỗi đơn hàng.
2. INNER JOIN - Theory
INNER JOIN: Trả về các bản ghi có giá trị khớp trong cả hai bảng.
Cú pháp:
SELECT columns FROM table1 INNER JOIN table2 ON table1.column = table2.column;
Ví dụ:
SELECT orders.order_id, customers.customer_name FROM orders INNER JOIN customers ON orders.customer_id = customers.customer_id;
Câu lệnh này sẽ trả về thông tin đơn hàng và tên khách hàng tương ứng.
3. INNER JOIN - Practice
Thực hành sử dụng INNER JOIN để kết hợp bảng orders và products:
SELECT orders.order_id, products.product_name, orders.quantity FROM orders INNER JOIN products ON orders.product_id = products.product_id;
Câu lệnh này sẽ trả về thông tin đơn hàng và tên sản phẩm tương ứng.
4. Challenge: INNER JOIN
- Yêu cầu: Viết truy vấn để lấy thông tin đơn hàng (order_id), tên khách hàng (customer_name), và phương thức thanh toán (payment_method) từ bảng orders và customers.
5. Solution: INNER JOIN
Giải pháp:
SELECT orders.order_id, customers.customer_name, orders.payment_method FROM orders INNER JOIN customers ON orders.customer_id = customers.customer_id;
6. FULL OUTER JOIN
FULL OUTER JOIN: Trả về tất cả các bản ghi từ cả hai bảng, kể cả những bản ghi không khớp.
Ví dụ:
SELECT customers.customer_name, orders.order_id FROM customers FULL OUTER JOIN orders ON customers.customer_id = orders.customer_id;
Câu lệnh này sẽ trả về tất cả khách hàng và đơn hàng, kể cả những khách hàng chưa đặt hàng và những đơn hàng không có thông tin khách hàng.
7. JOIN & WHERE
Kết hợp JOIN với WHERE để lọc dữ liệu.
Ví dụ:
SELECT orders.order_id, customers.customer_name FROM orders INNER JOIN customers ON orders.customer_id = customers.customer_id WHERE orders.total_amount > 200;
Câu lệnh này sẽ trả về các đơn hàng có tổng giá trị lớn hơn 200 và thông tin khách hàng tương ứng.
8. LEFT OUTER JOIN
LEFT OUTER JOIN: Trả về tất cả các bản ghi từ bảng bên trái và các bản ghi khớp từ bảng bên phải. Nếu không có bản ghi khớp, kết quả sẽ trả về NULL.
Ví dụ:
SELECT customers.customer_name, orders.order_id FROM customers LEFT OUTER JOIN orders ON customers.customer_id = orders.customer_id;
Câu lệnh này sẽ trả về tất cả khách hàng và đơn hàng tương ứng, kể cả những khách hàng chưa đặt hàng.
9. Challenge: LEFT OUTER JOIN
- Yêu cầu: Viết truy vấn để lấy tất cả sản phẩm (product_name) và đơn hàng tương ứng (order_id) từ bảng products và orders. Nếu sản phẩm chưa được đặt hàng, hãy trả về NULL cho order_id.
10. Solution: LEFT OUTER JOIN
Giải pháp:
SELECT products.product_name, orders.order_id FROM products LEFT OUTER JOIN orders ON products.product_id = orders.product_id;
11. RIGHT OUTER JOIN
RIGHT OUTER JOIN: Trả về tất cả các bản ghi từ bảng bên phải và các bản ghi khớp từ bảng bên trái. Nếu không có bản ghi khớp, kết quả sẽ trả về NULL.
Ví dụ:
SELECT orders.order_id, customers.customer_name FROM orders RIGHT OUTER JOIN customers ON orders.customer_id = customers.customer_id;
Câu lệnh này sẽ trả về tất cả đơn hàng và khách hàng tương ứng, kể cả những đơn hàng không có thông tin khách hàng.
12. Challenge: Joins
- Yêu cầu: Viết truy vấn để lấy tất cả đơn hàng (order_id) và tên sản phẩm tương ứng (product_name) từ bảng orders và products. Nếu đơn hàng không có thông tin sản phẩm, hãy trả về NULL cho product_name.
13. Solution: Joins
Giải pháp:
SELECT orders.order_id, products.product_name FROM orders LEFT OUTER JOIN products ON orders.product_id = products.product_id;
14. Joins on multiple conditions
JOIN có thể kết hợp nhiều điều kiện.
Ví dụ:
SELECT orders.order_id, customers.customer_name, products.product_name FROM orders INNER JOIN customers ON orders.customer_id = customers.customer_id INNER JOIN products ON orders.product_id = products.product_id;
Câu lệnh này sẽ trả về thông tin đơn hàng, khách hàng và sản phẩm tương ứng.
15. Solution: Joins on multiple conditions
Giải pháp:
SELECT orders.order_id, customers.customer_name, products.product_name FROM orders INNER JOIN customers ON orders.customer_id = customers.customer_id INNER JOIN products ON orders.product_id = products.product_id;
16. Joining multiple tables
Kết hợp nhiều bảng trong một truy vấn.
Ví dụ:
SELECT orders.order_id, customers.customer_name, products.product_name, orders.total_amount FROM orders INNER JOIN customers ON orders.customer_id = customers.customer_id INNER JOIN products ON orders.product_id = products.product_id;
Câu lệnh này sẽ trả về thông tin đơn hàng, khách hàng, sản phẩm và tổng giá trị đơn hàng.
17. Challenge: Joining multiple tables
- Yêu cầu: Viết truy vấn để lấy thông tin đơn hàng (order_id), tên khách hàng (customer_name), tên sản phẩm (product_name), và phương thức thanh toán (payment_method) từ bảng orders, customers, và products.
18. Solution: Joining multiple tables
Giải pháp:
SELECT orders.order_id, customers.customer_name, products.product_name, orders.payment_method FROM orders INNER JOIN customers ON orders.customer_id = customers.customer_id INNER JOIN products ON orders.product_id = products.product_id;
19. More challenges
Thử thách 1: Viết truy vấn để lấy tất cả khách hàng (customer_name) và số lượng đơn hàng (order_count) của họ từ bảng customers và orders.
Thử thách 2: Viết truy vấn để lấy tất cả sản phẩm (product_name) và tổng số lượng đã bán (total_quantity) từ bảng products và orders.
20. Today's slides
Tổng kết lại các loại JOIN đã học trong ngày hôm nay.
Cung cấp slide tham khảo để bạn ôn tập và thực hành thêm.
21. Today's summary
Hôm nay, bạn đã học:
Cách sử dụng INNER JOIN, FULL OUTER JOIN, LEFT OUTER JOIN, và RIGHT OUTER JOIN để kết hợp dữ liệu từ nhiều bảng.
Cách kết hợp JOIN với WHERE để lọc dữ liệu.
Cách kết hợp nhiều bảng trong một truy vấn.
Hẹn gặp lại bạn vào ngày 7 với chủ đề Advanced: UNION & Subqueries!