79
INNER JOIN so sánh từng dòng trong bảng products và OrderDetails để tìm một cặp bản
ghi có cùng productCode. Nếu một cặp bản ghi có cùng mã sản phẩm, khi đó tên sản
phẩm và số thứ tự cũng sẽ được kết hợp thành một hàng để trả lại kết quả.
Bí danh (Alias): có thể tạo bí danh của bảng
tbl_A là A
và tham chiếu đến cột
M
là
A.M
,
như vậy không mất công gõ lại tên bảng nữa. Ví dụ trên có thể viết lại như sau:
SELECT p.productCode, p.productName, o.orderNumber
FROM
products p
INNER JOIN orderDetails o on p.productCode = o.productCode;
Lưu ý: Bên cạnh phép nối trong sử dụng mệnh đề INNER JOIN .. ON, có thể nối trong
hai bảng bằng cách đưa điều kiện nối vào mệnh đề WHERE. Ví dụ trên có thể viết lại
như sau:
SELECT p.productCode, p.productName, o.orderNumber
FROM products p, orderDetails o
WHERE p.productCode = o.productCode;
Chúng ta sẽ xem xét một số ví dụ khác sử dụng phép nối dưới đây:
Ví dụ: Bảng Employees là bảng lưu giữ thông tin về các nhân viên của công ty; bảng
Customers là bảng lưu giữ thông tin của các khách hàng, trong đó có thông tin liên quan
đến mã số của nhân viên chăm sóc khách hàng. Như vậy liên kết giữa hai bảng này được
thực hiện thông qua cột employeeNumber của bảng Employees và cột salesRep
employeeNumber của bảng Customers.
Để biết thông tin về khách hàng và tên nhân viên chăm sóc khách hàng đó, có thể viết
truy vấn sử dụng INNER JOIN như sau:
SELECT customerName, firstname as EmployeeName
FROM customers
C join employees E
on C.salesrepemployeenumber = e.employeenumber
Kết quả trả về như sau:
81
Ví dụ: Đưa ra thông tin về các sản phẩm và tổng giá trị đã đặt hàng cho sản phẩm, sắp
xếp theo tổng giá trị tăng dần.
SELECT P.productCode,
P.productName,
SUM(priceEach * quantityOrdered)
total
FROM orderdetails O
INNER JOIN products P ON O.productCode = P.productCode
GROUP by productCode
ORDER BY total
Kết quả trả về như sau:
82
Bên cạnh phép nối hai bảng dữ liệu, ta có thể nối nhiều bảng dữ liệu trong cùng một câu
lệnh SELECT.
Ví dụ: Đưa ra tên các khách hàng và tổng giá trị các đơn hàng của các khách hàng đó.
SELECT C.customerName, sum(OD.priceEach*OD.quantityOrdered)
as total
FROM
customers C
INNER JOIN orders O on C.customerNumber = O.customerNumber
INNER JOIN orderdetails OD on O.orderNumber =
OD.orderNumber
GROUP BY C.customerName
Như trong ví dụ trên thông tin cần kết hợp từ ba bảng dữ liệu là customers, orders và
orderdetails.
Ví dụ: Đưa ra các đơn hàng, tên các khách hàng và tổng giá trị của đơn hàng đó.
83
SELECT O.orderNumber,C.customerName,
sum(OD.priceEach*OD.quantityOrdered) as total
FROM customers C
INNER JOIN orders O on C.customerNumber = O.customerNumber
INNER JOIN orderdetails OD on O.orderNumber =
OD.orderNumber
GROUP BY O.orderNumber;
Chia sẻ với bạn bè của bạn: