INNER JOIN
,LEFT JOIN
和RIGHT JOIN
是SQL中用于合并多个表数据的不同类型的连接操作。它们之间的区别在于连接的方向和保留的行。
-
INNER JOIN(内连接):
INNER JOIN
返回两个表中满足连接条件的交集。只返回那些在两个表中都存在的行。如果一个表中的行没有在另一个表中找到匹配,那么这些行将不会出现在结果中。 -
LEFT JOIN(左连接):
LEFT JOIN
返回左边表(第一个表)的所有行,以及右边表(第二个表)中满足连接条件的交集。如果右表中没有匹配的行,将返回一个null值。 -
RIGHT JOIN(右连接):
RIGHT JOIN
与LEFT JOIN
类似,但是返回右边表的所有行,以及左边表中满足连接条件的交集。如果左表中没有匹配的行,将返回一个null值。
下面是一个示例,说明这些连接的区别:
假设有两个表 Orders
和 Customers
:
Orders 表:
OrderID | CustomerID | OrderDate |
---|---|---|
1 | 101 | 2023-01-01 |
2 | 102 | 2023-01-02 |
3 | 103 | 2023-01-03 |
Customers 表:
CustomerID | CustomerName |
---|---|
101 | Alice |
102 | Bob |
1. INNER JOIN:
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
结果:只返回有匹配的行,得到以下结果:
OrderID | CustomerName |
---|---|
1 | Alice |
2 | Bob2. |
2. LEFT JOIN:
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
LEFT JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
结果:返回左表的所有行,以及右表中满足连接条件的行。
OrderID | CustomerName |
---|---|
1 | Alice |
2 | Bob |
3 | NULL |
3. RIGHT JOIN:
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
RIGHT JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
结果:返回右表的所有行,以及左表中满足连接条件的行。
OrderID | CustomerName |
---|---|
1 | Alice |
2 | Bob |
NULL | NULL |