能举例说明具体的区别吗?
时间: 2023-08-18 09:06:25 浏览: 70
Differences
当两个表进行JOIN操作时,不同的JOIN类型将会有不同的结果。以下是一个简单的例子:
假设我们有两个表: `TableA` 和 `TableB`,它们的数据如下:
TableA:
| ID | Name |
| --- | ------ |
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie|
TableB:
| ID | Age |
| --- | --- |
| 1 | 20 |
| 2 | 25 |
| 4 | 30 |
1. INNER JOIN(内连接)
```sql
SELECT * FROM TableA
INNER JOIN TableB ON TableA.ID = TableB.ID;
```
结果:
| ID | Name | Age |
| --- | ------ | --- |
| 1 | Alice | 20 |
| 2 | Bob | 25 |
内连接返回的结果只包含两个表中都存在的ID,即1和2,它们的Name和Age分别是Alice和20,Bob和25。
2. LEFT JOIN(左连接)
```sql
SELECT * FROM TableA
LEFT JOIN TableB ON TableA.ID = TableB.ID;
```
结果:
| ID | Name | Age |
| --- | ------- | --- |
| 1 | Alice | 20 |
| 2 | Bob | 25 |
| 3 | Charlie | NULL|
左连接返回的结果包含左表中的所有行,以及右表中与左表匹配的行。在这个例子中,TableB中没有与ID为3的行匹配,因此Age列的值为NULL。
3. RIGHT JOIN(右连接)
```sql
SELECT * FROM TableA
RIGHT JOIN TableB ON TableA.ID = TableB.ID;
```
结果:
| ID | Name | Age |
| --- | ------ | --- |
| 1 | Alice | 20 |
| 2 | Bob | 25 |
| 4 | NULL | 30 |
右连接返回的结果包含右表中的所有行,以及左表中与右表匹配的行。在这个例子中,TableA中没有与ID为4的行匹配,因此Name列的值为NULL。
4. FULL OUTER JOIN(全外连接)
```sql
SELECT * FROM TableA
FULL OUTER JOIN TableB ON TableA.ID = TableB.ID;
```
结果:
| ID | Name | Age |
| --- | ------- | --- |
| 1 | Alice | 20 |
| 2 | Bob | 25 |
| 3 | Charlie | NULL|
| 4 | NULL | 30 |
全外连接返回的结果包含左表和右表中的所有行,如果某个表中没有匹配的行,则该表的相应列的值为NULL。在这个例子中,TableA中没有与ID为4的行匹配,因此Name列的值为NULL;TableB中没有与ID为3的行匹配,因此Age列的值为NULL。
阅读全文