Mục tiêu
Truy vấn dữ liệu từ nhiều bảng- Luyện tập sử dụng câu lệnh JOIN.
Mô tả- Truy vấn dữ liệu từ nhiều bảng
Truy vấn dữ liệu từ các bảng của CSDL bán hàng có sẵn.
Hướng dẫn nộp bài:
- Up code lên github
- Paste link github vào phần nộp bài
Hướng dẫn thực hiện
Bước 1: Sử dụng inner join để lấy dữ liệu từ hai bảng.
Quan sát 3 bảng customers, orders và payments trong csdl classicmodels.
Bây giờ, nếu bạn muốn lấy customerNumber, customerName, phone, paymentDate, amount từ hai bảng customers và payments với điều kiện là các khách hàng sống ở thành phố Las Vegas thực hiện truy vấn sau:
select customers.customerNumber, customerName, phone, paymentDate, amount from customers inner join payments on customers.customerNumber = payments.customerNumber where city = 'Las Vegas'
Trong câu lệnh trên đối với mỗi hàng trong bảng customers, mệnh đề inner join so sanh nó với mỗi hàng của bảng payments để kiểm tra nếu cả hai thỏa mãn điều kiện nối (customers.customerNumber = payments.customerNumber). Khi điều kiện kết nối được khớp, nó sẽ trả lại hàng kết hợp các cột trong cả hai bảng customers và payments.
Kết quả trả về:
Bước 2: Sử dụng left join để lấy dữ liệu từ hai bảng.
Quan sát 2 bảng customers và orders trong csdl classicmodels.
Để tìm tất cả các đơn hàng thuộc từng khách hàng, bạn có thể sử dụng mệnh đề LEFT JOIN như sau:
select customers.customerNumber, customers.customerName, orders.orderNumber, orders.status from customers left join orders on customers.customerNumber = orders.customerNumber
Kết quả trả về
Tất cả các bản ghi trong bảng customers đều được đưa vào bộ kết quả. Tuy nhiên, có những bản ghi trong bộ kết quả có dữ liệu khách hàng nhưng không có dữ liệu đặt hàng ví dụ: 168, 169, vv các dữ liệu lệnh trong những hàng này là NULL. Điều này có nghĩa là những khách hàng này không có đơn hàng nào trong bảng orders.
Nếu bạn thay thế mệnh đề LEFT JOIN bởi mệnh đề INNER JOIN, bạn chỉ nhận được những khách hàng có đơn đặt hàng trong bảng đơn đặt hàng.
Để tìm tất cả khách hàng chưa đặt hàng bất kỳ sản phẩm nào, bạn có thể sử dụng truy vấn sau:
select customers.customerNumber, customers.customerName, orders.orderNumber, orders.status from customers LEFT JOIN orders on customers.customerNumber = orders.customerNumber where orderNumber is null
Kết quả trả về:
Qua bài tập trên bạn đã luyện tập:
- Truy vấn dữ liệu từ nhiều bảng với INNER JOIN
- Truy vấn dữ liệu từ nhiều bảng với LEFT JOIN
Trên đây CodeGym đã cùng với bạn luyện tập sử dụng câu lệnh JOIN. Hãy chụp ảnh màn hình và nộp bài thực hành của bạn trên CodeGymX để cùng nhau luyện tập nhé!
0 Lời bình