Visual JOIN 可视化学习工具
只返回两个表中匹配的行
SQL 语句
SELECT
users.id,
users.name,
likes.like
FROM
users
INNER JOIN
likes
ON users.id = likes.userIdUsers
| id | name |
|---|---|
| 1 | Patrik |
| 2 | Albert |
| 3 | Maria |
| 4 | Darwin |
| 5 | Elizabeth |
Likes
| userId | like |
|---|---|
| 1 | Climbing |
| 1 | Code |
| 3 | Stars |
| 4 | Apples |
| 6 | Rugby |
JOIN 结果
| id | name | like |
|---|---|---|
| 1 | Patrik | Climbing |
| 1 | Patrik | Code |
| 3 | Maria | Stars |
| 4 | Darwin | Apples |
INNER JOIN(内连接)
定义:返回两个表中匹配的行
特点:
- 只返回左表和右表中都匹配的数据
- 是最常用的 JOIN 类型
- 相当于两个集合的交集
适用场景:需要获取两个表中都存在的关联数据
LEFT JOIN(左连接)
定义:返回左表的所有行,以及右表中匹配的行
特点:
- 保留左表的所有数据
- 右表中没有匹配的数据显示为 NULL
- 左表是主要关注的表
适用场景:以左表为主,需要关联右表的补充信息
LEFT ANTI JOIN(左反连接)
定义:只返回左表中在右表中没有匹配的行
特点:
- 只显示左表中没有匹配的数据
- 排除与右表匹配的行
- 相当于左表减去与右表的交集
适用场景:查找左表中在右表中没有对应的数据
FULL ANTI JOIN(全反连接)
定义:返回两个表中都没有匹配的行
特点:
- 显示左表中没有匹配的数据
- 显示右表中没有匹配的数据
- 相当于两个集合的对称差集
适用场景:查找两个表中不匹配的所有数据
RIGHT JOIN(右连接)
定义:返回右表的所有行,以及左表中匹配的行
特点:
- 保留右表的所有数据
- 左表中没有匹配的数据显示为 NULL
- 右表是主要关注的表
适用场景:以右表为主,需要关联左表的补充信息
OUTER JOIN(全外连接)
定义:返回左表和右表的所有行,没有匹配的位置用 NULL 填充
特点:
- 保留两个表的所有数据
- 没有匹配的数据显示为 NULL
- 相当于两个集合的并集
适用场景:需要完整保留两个表的所有数据