跳到主要内容

Visual JOIN 可视化学习工具

只返回两个表中匹配的行

SQL 语句
SELECT
  users.id,
  users.name,
  likes.like
FROM
  users
INNER JOIN
  likes 
  ON users.id = likes.userId

Users

idname
1Patrik
2Albert
3Maria
4Darwin
5Elizabeth

Likes

userIdlike
1Climbing
1Code
3Stars
4Apples
6Rugby

JOIN 结果

idnamelike
1PatrikClimbing
1PatrikCode
3MariaStars
4DarwinApples

INNER JOIN(内连接)

定义:返回两个表中匹配的行

特点

  • 只返回左表和右表中都匹配的数据
  • 是最常用的 JOIN 类型
  • 相当于两个集合的交集

适用场景:需要获取两个表中都存在的关联数据


LEFT JOIN(左连接)

定义:返回左表的所有行,以及右表中匹配的行

特点

  • 保留左表的所有数据
  • 右表中没有匹配的数据显示为 NULL
  • 左表是主要关注的表

适用场景:以左表为主,需要关联右表的补充信息


LEFT ANTI JOIN(左反连接)

定义:只返回左表中在右表中没有匹配的行

特点

  • 只显示左表中没有匹配的数据
  • 排除与右表匹配的行
  • 相当于左表减去与右表的交集

适用场景:查找左表中在右表中没有对应的数据


FULL ANTI JOIN(全反连接)

定义:返回两个表中都没有匹配的行

特点

  • 显示左表中没有匹配的数据
  • 显示右表中没有匹配的数据
  • 相当于两个集合的对称差集

适用场景:查找两个表中不匹配的所有数据


RIGHT JOIN(右连接)

定义:返回右表的所有行,以及左表中匹配的行

特点

  • 保留右表的所有数据
  • 左表中没有匹配的数据显示为 NULL
  • 右表是主要关注的表

适用场景:以右表为主,需要关联左表的补充信息


OUTER JOIN(全外连接)

定义:返回左表和右表的所有行,没有匹配的位置用 NULL 填充

特点

  • 保留两个表的所有数据
  • 没有匹配的数据显示为 NULL
  • 相当于两个集合的并集

适用场景:需要完整保留两个表的所有数据