

Kết Hợp Dữ Liệu Từ Nhiều Bảng Với JOIN Trong MySQL
- 08-07-2025
- Toanngo92
- 0 Comments
Một trong những chủ đề quan trọng nhất trong SQL — đó là JOIN
. Đây là kỹ thuật được sử dụng để kết hợp dữ liệu từ nhiều bảng dựa trên mối quan hệ giữa chúng (thường là khóa chính – khóa ngoại).
Mục lục
✅ 1. Tại sao cần JOIN
?
Trong cơ sở dữ liệu quan hệ, dữ liệu được phân tách thành nhiều bảng để đảm bảo tính tổ chức và chuẩn hóa (normalization). Do đó, để truy vấn dữ liệu liên quan từ nhiều bảng, chúng ta cần JOIN
.
Ví dụ thực tế:
- Bảng
Orders
: chứa đơn hàng - Bảng
Customers
: chứa thông tin khách hàng
Muốn xem đơn hàng kèm theo tên khách hàng, bạn cần JOIN
hai bảng này.
✅ 2. Các loại JOIN
phổ biến trong MySQL
Tên JOIN | Ý nghĩa |
---|---|
INNER JOIN | Lấy bản ghi khớp ở cả hai bảng |
LEFT JOIN | Lấy tất cả bản ghi bên trái + bản ghi khớp từ bảng phải (nếu có) |
RIGHT JOIN | Lấy tất cả bản ghi bên phải + bản ghi khớp từ bảng trái (nếu có) |
FULL OUTER JOIN | ❌ MySQL không hỗ trợ trực tiếp (mô phỏng bằng UNION) |
✅ 3. Ví dụ thực hành
Giả sử có 2 bảng:
CREATE TABLE Customers (
id INT PRIMARY KEY,
name VARCHAR(50)
);
CREATE TABLE Orders (
id INT PRIMARY KEY,
customer_id INT,
amount DECIMAL(10,2),
FOREIGN KEY (customer_id) REFERENCES Customers(id)
);
-- Thêm dữ liệu
INSERT INTO Customers VALUES (1, 'Nam'), (2, 'Linh'), (3, 'Hà');
INSERT INTO Orders VALUES (1, 1, 500), (2, 2, 300), (3, 1, 200);
✅ 4. INNER JOIN – Lấy các dòng có khớp ở cả 2 bảng
SELECT Orders.id, Customers.name, Orders.amount
FROM Orders
INNER JOIN Customers ON Orders.customer_id = Customers.id;
📌 Kết quả: chỉ hiện đơn hàng của những khách hàng tồn tại trong bảng Customers
.
✅ 5. LEFT JOIN – Lấy tất cả dòng bên trái
SELECT Customers.name, Orders.amount
FROM Customers
LEFT JOIN Orders ON Customers.id = Orders.customer_id;
📌 Kết quả: danh sách tất cả khách hàng, dù có đơn hàng hay không. Nếu không có đơn hàng → NULL
.
✅ 6. RIGHT JOIN – Ngược lại với LEFT JOIN
SELECT Customers.name, Orders.amount
FROM Customers
RIGHT JOIN Orders ON Customers.id = Orders.customer_id;
📌 Dùng khi bạn cần tất cả đơn hàng, kể cả khi khách hàng không còn tồn tại (ít gặp hơn).
✅ 7. FULL OUTER JOIN (Mô phỏng)
MySQL không hỗ trợ FULL OUTER JOIN trực tiếp, nhưng bạn có thể mô phỏng bằng UNION
:
SELECT Customers.name, Orders.amount
FROM Customers
LEFT JOIN Orders ON Customers.id = Orders.customer_id
UNION
SELECT Customers.name, Orders.amount
FROM Customers
RIGHT JOIN Orders ON Customers.id = Orders.customer_id;
✅ 8. Aliases (bí danh) khi JOIN
SELECT o.id, c.name, o.amount
FROM Orders o
JOIN Customers c ON o.customer_id = c.id;
✅ 9. JOIN nhiều bảng
Bạn có thể JOIN
nhiều bảng liên tiếp:
SELECT o.id, c.name, s.name AS shipper
FROM Orders o
JOIN Customers c ON o.customer_id = c.id
JOIN Shippers s ON o.shipper_id = s.id;
📘 Kết Luận
JOIN
giúp kết hợp dữ liệu từ nhiều bảng — rất quan trọng trong các hệ thống thực tế.INNER JOIN
là loại dùng thường xuyên nhất.LEFT JOIN
rất hữu ích khi bạn cần giữ lại các dòng từ bảng chính dù không có dữ liệu liên quan.
👉 Trong bài tiếp theo, bạn nên học về:
SUBQUERY
(truy vấn lồng nhau) — một phần rất mạnh mẽ để xử lý logic phức tạpCASE WHEN
– điều kiện trongSELECT
- Tạo
VIEW
vàINDEX
Bạn muốn tiếp tục phần nào trước? SUBQUERY
hay CASE WHEN
?