INNER JOIN là loại liên kết (JOIN) phổ biến nhất trong MySQL. Nó được sử dụng để kết hợp các hàng từ hai hoặc nhiều bảng dựa trên một điều kiện nào đó, và chỉ trả về các bản ghi mà điều kiện kết hợp giữa các bảng được thỏa mãn.
Customers
CustomerName | Product |
---|---|
John Smith | Laptop |
John Smith | Tablet |
Ana Williams | Smartphone |
Trong ví dụ này:
Customers
và Orders
chỉ khi giá trị của CustomerID trong cả hai bảng trùng khớp.Customers
CustomerName | ProductName | Price | OrderDate |
---|---|---|---|
John Smith | Laptop | 800 | 2024-01-01 |
John Smith | Tablet | 300 | 2024-01-05 |
Ana Williams | Smartphone | 500 | 2024-01-03 |
Customers
và Orders
: Kết hợp hai bảng dựa trên cột CustomerID, chỉ lấy các hàng khi có giá trị khớp giữa khách hàng và đơn hàng.Orders
và Products
: Kết hợp bảng Orders
với bảng Products
dựa trên cột ProductID để lấy tên sản phẩm và giá tiền.Giả sử bạn chỉ muốn lấy các đơn hàng có giá trên 400, bạn có thể thêm điều kiện WHERE vào truy vấn:
SELECT Customers.CustomerName, Products.ProductName, Products.Price, Orders.OrderDate FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID INNER JOIN Products ON Orders.ProductID = Products.ProductID WHERE Products.Price > 400;
CustomerName | ProductName | Price | OrderDate |
---|---|---|---|
John Smith | Laptop | 800 | 2024-01-01 |
Ana Williams | Smartphone | 500 | 2024-01-03 |
Trong ví dụ này, điều kiện WHERE Products.Price > 400 đã loại bỏ sản phẩm Tablet của John Smith có giá 300, vì nó không thỏa mãn điều kiện.
Nếu bạn muốn tính tổng giá trị các đơn hàng mà mỗi khách hàng đã đặt, bạn có thể sử dụng hàm tổng hợp SUM() và kết hợp với GROUP BY.
SELECT Customers.CustomerName, SUM(Products.Price) AS TotalSpent FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID INNER JOIN Products ON Orders.ProductID = Products.ProductID GROUP BY Customers.CustomerName;
CustomerName | TotalSpent |
---|---|
John Smith | 1100 |
Ana Williams | 500 |
Trong ví dụ này:
Để làm cho truy vấn của bạn ngắn gọn và dễ đọc hơn, bạn có thể sử dụng bí danh cho bảng và cột.
SELECT C.CustomerName, P.ProductName, P.Price, O.OrderDate FROM Customers C INNER JOIN Orders O ON C.CustomerID = O.CustomerID INNER JOIN Products P ON O.ProductID = P.ProductID;
Kết quả vẫn giống như truy vấn trước, nhưng việc sử dụng bí danh (C, O, P) giúp câu truy vấn ngắn gọn và dễ theo dõi hơn khi có nhiều bảng tham gia.