FULL JOIN (hay còn gọi là FULL OUTER JOIN) là một loại liên kết trả về tất cả các hàng từ cả hai bảng, bất kể có sự khớp giữa các cột trong hai bảng hay không. Nếu không có giá trị khớp, kết quả sẽ có giá trị NULL cho các cột từ bảng không có hàng tương ứng.
Tuy nhiên, MySQL không hỗ trợ trực tiếp cú pháp FULL JOIN. Để đạt được kết quả tương tự như FULL JOIN, ta cần kết hợp LEFT JOIN và RIGHT JOIN cùng với toán tử UNION.
Cú pháp mô phỏng FULL JOIN trong MySQL
SELECT column_name(s)
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name
UNION
SELECT column_name(s)
FROM table1
RIGHT JOIN table2 ON table1.column_name = table2.column_name;
LEFT JOIN: Lấy tất cả các hàng từ bảng bên trái và các giá trị khớp từ bảng bên phải (hoặc NULL nếu không có hàng khớp).
RIGHT JOIN: Lấy tất cả các hàng từ bảng bên phải và các giá trị khớp từ bảng bên trái (hoặc NULL nếu không có hàng khớp).
UNION: Kết hợp kết quả từ cả hai truy vấn, loại bỏ các bản ghi trùng lặp.
Ví dụ về FULL JOIN
Giả sử bạn có hai bảng 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
4
Tablet
Bạn muốn liệt kê tất cả các khách hàng và đơn hàng, kể cả những khách hàng không có đơn hàng và những đơn hàng không có khách hàng tương ứng.
Truy vấn mô phỏng FULL JOIN trong MySQL:
SELECT Customers.CustomerID, Customers.CustomerName, Orders.OrderID, Orders.Product
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
UNION
SELECT Customers.CustomerID, Customers.CustomerName, Orders.OrderID, Orders.Product
FROM Customers
RIGHT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
Kết quả:
CustomerID
CustomerName
OrderID
Product
1
John Smith
101
Laptop
2
Ana Williams
102
Smartphone
3
Maria Anders
NULL
NULL
NULL
NULL
103
Tablet
Giải thích:
John Smith và Ana Williams có đơn hàng, nên thông tin khách hàng và đơn hàng của họ được hiển thị.
Maria Anders không có đơn hàng, nên các cột liên quan đến đơn hàng là NULL.
Đơn hàng với OrderID 103 không có khách hàng tương ứng (CustomerID không tồn tại trong bảng Customers), do đó các cột liên quan đến khách hàng là NULL.
Sử dụng FULL JOIN với nhiều bảng
Giả sử bạn có thêm bảng Products, và bạn muốn liệt kê tất cả các đơn hàng, sản phẩm được đặt, và khách hàng (bao gồm cả những đơn hàng hoặc sản phẩm không có khách hàng hoặc sản phẩm tương ứng).
Bảng Products:
ProductID
ProductName
Price
1001
Laptop
800
1002
Smartphone
500
1003
Tablet
300
Truy vấn mô phỏng FULL JOIN kết hợp nhiều bảng:
SELECT Customers.CustomerName, Orders.OrderID, Products.ProductName, Products.Price
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
LEFT JOIN Products ON Orders.Product = Products.ProductName
UNION
SELECT Customers.CustomerName, Orders.OrderID, Products.ProductName, Products.Price
FROM Customers
RIGHT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
RIGHT JOIN Products ON Orders.Product = Products.ProductName;
Kết quả:
CustomerName
OrderID
ProductName
Price
John Smith
101
Laptop
800
Ana Williams
102
Smartphone
500
NULL
103
Tablet
300
Maria Anders
NULL
NULL
NULL
Giải thích:
John Smith đã đặt Laptop, và thông tin khách hàng, đơn hàng, và sản phẩm đều có.
Ana Williams đã đặt Smartphone, và tất cả thông tin được hiển thị.
Đơn hàng 103 là đơn hàng cho Tablet, nhưng không có khách hàng tương ứng.
Maria Anders không có đơn hàng hoặc sản phẩm, nên các cột liên quan đến đơn hàng và sản phẩm là NULL.
Khi nào nên sử dụng FULL JOIN?
FULL JOIN rất hữu ích khi bạn muốn lấy tất cả dữ liệu từ cả hai bảng, ngay cả khi không có bản ghi khớp. Nó thường được sử dụng trong các tình huống sau:
Khi bạn muốn giữ lại tất cả dữ liệu từ cả hai bảng mà không mất đi bất kỳ bản ghi nào.
Khi bạn cần kết hợp dữ liệu từ hai bảng mà không biết liệu có các bản ghi tương ứng trong cả hai bảng hay không.
Ví dụ:
Kết hợp danh sách khách hàng và đơn hàng để hiển thị tất cả khách hàng (kể cả chưa có đơn hàng) và tất cả các đơn hàng (kể cả những đơn hàng không có khách hàng).
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.