76
Bài thực hành số 7
Các phép nối bảng dữ liệu
Nội dung chính:
Trong các bài thực hành trước, các truy vấn được thực hiện
trên một bảng dữ liệu. Không ngạc nhiên khi rất nhiều truy vấn yêu cầu thông tin
từ nhiều bảng dữ liệu khác nhau. Ví dụ muốn đưa ra thông tin khách hàng của các
đơn hàng, cần kết hợp thông tin từ hai bảng dữ liệu là customers và orders. Kết
hợp các bảng dữ liệu để tạo ra một bảng suy diễn được gọi là phép nối (join).
Trong bài này, chúng ta sẽ làm quen với phép toán nối để truy vấn dữ liệu từ
nhiều bảng : INNER JOIN, LEFT JOIN, SELF JOIN
1. PHÉP NỐI TRONG (INNER JOIN)
INNER JOIN hay còn gọi là phép nối trong, là một phần tùy chọn của câu lệnh
SELECT. Nó xuất hiện liền ngay sau mệnh đề FROM. Trước khi sử dụng INNER JOIN,
phải xác định rõ các tiêu chí sau đây:
Trước tiên, cần phải xác định các bảng mà muốn liên kết với bảng chính. Bảng
chính xuất hiện trong mệnh đề FROM. Bảng muốn nối với bảng chính phải xuất
hiện sau từ khóa INNER JOIN. Về mặt lý thuyết, có thể nối một bảng với số
77
lượng không giới hạn các bảng khác, tuy nhiên, để có hiệu suất tốt hơn, nên hạn
chế số lượng bảng tham gia phép nối dựa trên các điều kiện nối và khối lượng dữ
liệu trong các bảng.
Thứ hai, cần phải xác định điều kiện nối. Điều kiện nối xuất hiện sau từ khóa
ON. Điều kiện nối chính là nguyên tắc để tìm được các bản ghi phù hợp trong các
bảng và nối chúng lại với nhau.
Cú pháp INNER JOIN như sau:
SELECT column_list
FROM table1
INNER JOIN table2 ON join_condition1
INNER JOIN table3 ON join_condition2
...
WHERE WHERE_conditions;
Ví dụ, nếu nối hai bảng A và B, INNER JOIN so sánh mỗi bản ghi của bảng A với mỗi
bản ghi của bảng B để tìm tất cả các cặp bản ghi đáp ứng được điều kiện nối. Khi điều
kiện nối được thoả mãn, giá trị cột cho mỗi cặp bản ghi phù hợp của bảng A và bảng B
được kết hợp thành một bản ghi trong kết quả trả về.
Hạn chế sự trùng tên cột khi sử dụng INNER JOIN:
Nếu nối nhiều bảng có cột với tên
tương tự, phải chỉ rõ tên bảng có chứa cột dữ liệu định lấy để tránh lỗi cột không rõ
ràng.
Giả sử nếu bảng
tbl_A
và
tbl_B
có các cột tương tự
M
.
Trong câu lệnh
SELECT
với INNER JOIN, phải tham chiếu tới cột
M
bằng cách sử dụng cú pháp như
tbl_A.M
.
Ví dụ: Hãy xem xét hai bảng products và orderDetails. Bảng products là bảng dữ liệu
tổng thể lưu trữ tất cả các sản phẩm.
Bất cứ khi nào một sản phẩm được bán ra, nó được
lưu trữ trong bảng OrderDetails cùng với các thông tin khác.
Liên kết giữa các bảng này
là cột productCode