内连接(Inner Join)和外连接(Outer Join)是 SQL 中用于连接多个表的两种不同方式。
内连接是通过匹配两个或多个表之间的共同值来返回符合条件的行。只有当连接条件满足时,才会返回行。内连接只返回在连接列上有匹配的行,而不返回没有匹配的行。
外连接是在内连接的基础上,还会返回没有匹配的行。外连接可以分为左外连接(Left Outer Join)、右外连接(Right Outer Join)和全外连接(Full Outer Join)。
- 左外连接(Left Outer Join):返回左表中的所有行,以及右表中与左表匹配的行。如果右表中没有匹配的行,则返回 NULL 值。
- 右外连接(Right Outer Join):返回右表中的所有行,以及左表中与右表匹配的行。如果左表中没有匹配的行,则返回 NULL 值。
- 全外连接(Full Outer Join):返回左表和右表中的所有行,如果没有匹配的行,则返回 NULL 值。
下面是一个示例,展示了内连接和外连接的区别:
假设有两个表,一个是 "Customers" 表,另一个是 "Orders" 表。它们之间通过 "CustomerID" 列进行连接。
Customers 表:
| CustomerID | CustomerName |
|---|---|
| 1 | John |
| 2 | Sarah |
| 3 | Mike |
Orders 表:
| OrderID | CustomerID | OrderDate |
|---|---|---|
| 1 | 1 | 2021-01-01 |
| 2 | 1 | 2021-02-01 |
| 3 | 2 | 2021-03-01 |
内连接示例:
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;
```
结果:
| CustomerName | OrderID |
|--------------|---------|
| John | 1 |
| John | 2 |
| Sarah | 3 |
内连接只返回有匹配关系的行,只有 "John" 和 "Sarah" 这两个客户有对应的订单,所以只返回这两个客户的信息。
左外连接示例:
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;
```
结果:
| CustomerName | OrderID |
|--------------|---------|
| John | 1 |
| John | 2 |
| Sarah | 3 |
| Mike | NULL |
左外连接返回左表(Customers)的所有行,以及与左表匹配的右表(Orders)的行。在这个例子中,"Mike" 是一个没有对应订单的客户,所以在结果中显示为 NULL。
右外连接示例:
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
RIGHT JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;
```
结果:
| CustomerName | OrderID |
|--------------|---------|
| John | 1 |
| John | 2 |
| Sarah | 3 |
右外连接返回右表(Orders)的所有行,以及与右表匹配的左表(Customers)的行。在这个例子中,只有 "John" 和 "Sarah" 这两个客户有对应的订单,所以只返回这两个客户的信息。
303



被折叠的 条评论
为什么被折叠?



