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.
Cú pháp cơ bản của INNER JOIN:
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
Giải thích:
SELECT column_name(s): Chọn các cột bạn muốn lấy dữ liệu.
FROM table1: Xác định bảng đầu tiên.
INNER JOIN table2: Xác định bảng thứ hai mà bạn muốn kết hợp với bảng đầu tiên.
ON table1.column_name = table2.column_name: Điều kiện kết hợp giữa hai bảng dựa trên các cột tương ứng có giá trị khớp nhau.
Ví dụ thực tế:
Giả sử bạn có hai bảng trong cơ sở dữ liệu như sau:
Bảng Customers (thông tin khách hàng):
CustomerID
CustomerName
Country
1
John Smith
USA
2
Ana Williams
Canada
3
Maria Anders
Germany
Bảng Orders (thông tin đơn hàng):
OrderID
CustomerID
Product
101
1
Laptop
102
2
Smartphone
103
1
Tablet
Bạn muốn lấy thông tin về các khách hàng đã đặt hàng và thông tin về sản phẩm họ đã mua. Bạn có thể sử dụng INNER JOIN để kết hợp hai bảng này dựa trên cột CustomerID.
SELECT Customers.CustomerName, Orders.Product
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;
Kết quả:
CustomerName
Product
John Smith
Laptop
John Smith
Tablet
Ana Williams
Smartphone
Trong ví dụ này:
INNER JOIN đã kết hợp các hàng từ bảng Customers và Orders chỉ khi giá trị của CustomerID trong cả hai bảng trùng khớp.
Kết quả chỉ bao gồm những khách hàng đã có đơn hàng (John Smith và Ana Williams).
Một số lưu ý khi sử dụng INNER JOIN:
Chỉ các hàng có giá trị khớp được trả về: Nếu có khách hàng mà không có đơn hàng, như Maria Anders trong ví dụ trên, thông tin của họ sẽ không xuất hiện trong kết quả.
Sử dụng với nhiều bảng: Bạn có thể kết hợp nhiều bảng với INNER JOIN bằng cách thêm các bảng và điều kiện kết hợp tương ứng.
SELECT column_name(s)
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name
INNER JOIN table3 ON table2.column_name = table3.column_name;
Khi nào nên sử dụng INNER JOIN?
Khi bạn chỉ muốn lấy dữ liệu ở các bảng có giá trị chung.
Khi cần kết hợp dữ liệu từ nhiều bảng dựa trên một hoặc nhiều điều kiện cụ thể.
INNER JOIN là công cụ mạnh mẽ để kết hợp và xử lý dữ liệu một cách linh hoạt trong MySQL, đặc biệt hữu ích trong các hệ thống có nhiều bảng dữ liệu liên kết chặt chẽ.
Ví dụ nâng cao về INNER JOIN trong MySQL
Giả sử bạn có ba bảng trong cơ sở dữ liệu về cửa hàng trực tuyến:
Bảng Customers (thông tin khách hàng):
CustomerID
CustomerName
Country
1
John Smith
USA
2
Ana Williams
Canada
3
Maria Anders
Germany
Bảng Orders (thông tin đơn hàng):
OrderID
CustomerID
ProductID
OrderDate
101
1
1001
2024-01-01
102
2
1002
2024-01-03
103
1
1003
2024-01-05
Bảng Products (thông tin sản phẩm):
ProductID
ProductName
Price
1001
Laptop
800
1002
Smartphone
500
1003
Tablet
300
Bài toán:
Bạn muốn kết hợp dữ liệu từ ba bảng này để lấy thông tin về khách hàng, sản phẩm mà họ đã mua và giá của sản phẩm.
Truy vấn nâng cao sử dụng INNER JOIN trên ba bảng:
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;
Kết quả:
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
Giải thích:
INNER JOIN giữa 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.
INNER JOIN giữa 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.
Kết quả trả về: Chỉ các khách hàng có đơn hàng và sản phẩm tương ứng sẽ được hiển thị, cùng với giá của sản phẩm và ngày đặt hàng.
Ví dụ nâng cao với điều kiện bổ sung
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;
Kết quả:
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.
Ví dụ với các hàm tổng hợp (Aggregate Functions)
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;
Kết quả:
CustomerName
TotalSpent
John Smith
1100
Ana Williams
500
Giải thích:
SUM(Products.Price): Tính tổng giá trị đơn hàng của mỗi khách hàng.
GROUP BY Customers.CustomerName: Nhóm kết quả theo tên khách hàng để tính toán tổng giá trị đơn hàng của từng người.
Trong ví dụ này:
John Smith đã mua hai sản phẩm (Laptop và Tablet) với tổng giá trị 1100.
Ana Williams đã mua một sản phẩm (Smartphone) với giá 500.
Kết hợp INNER JOIN với Alias (bí danh)
Để 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.
This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.
Strictly Necessary Cookies
Strictly Necessary Cookie should be enabled at all times so that we can save your preferences for cookie settings.
If you disable this cookie, we will not be able to save your preferences. This means that every time you visit this website you will need to enable or disable cookies again.