MySQL:七种 SQL JOINS 的实现(图文详解)
在MySQL中,JOIN是用来在一个表中的行与另一个表中的行进行匹配的操作。JOIN操作有很多种,最常见的有INNER JOIN,LEFT JOIN,RIGHT JOIN,FULL JOIN,和CROSS JOIN。
- INNER JOIN(内连接)
INNER JOIN会返回两个表中有匹配的记录。如果在一个表中有行而在另一个表中没有匹配的行,则结果集中不包括这些行。
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
- LEFT JOIN(左连接)
LEFT JOIN会返回左表的所有记录,即使右表中没有匹配的记录。如果右表中有匹配的记录,则结果集中会包括这些记录。
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
- RIGHT JOIN(右连接)
RIGHT JOIN会返回右表的所有记录,即使左表中没有匹配的记录。如果左表中有匹配的记录,则结果集中会包括这些记录。
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
RIGHT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
- FULL OUTER JOIN(全外连接)
FULL OUTER JOIN会返回两个表中至少有一个匹配的所有记录。如果在一个表中有行而在另一个表中没有匹配的行,则结果集中将包括这些行,并用NULL填充未匹配的行。
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
- CROSS JOIN(交叉连接)
CROSS JOIN会返回两个表的笛卡尔积,即每个表中的每行与另一个表中的每行组合。
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
CROSS JOIN Orders;
- UNION(联合)
UNION会合并两个或多个SELECT语句的结果集,并消除重复行。
SELECT OrderID FROM Orders WHERE OrderDate = '2000-05-08'
UNION
SELECT OrderID FROM Orders WHERE OrderDate = '2000-05-09';
- EXCEPT(差集)
EXCEPT会返回在一个SELECT语句结果集中存在,而在另一个SELECT语句结果集中不存在的所有行。
SELECT OrderID FROM Orders WHERE OrderDate = '2000-05-08'
EXCEPT
SELECT OrderID FROM Orders WHERE OrderDate = '2000-05-09';
以上就是MySQL中的七种SQL JOINS的实现方法和代码示例。
评论已关闭