【无标题】

LEFT JOINRIGHT JOININNER JOIN 的区别

在 SQL 中,JOIN 主要用于连接多张表的数据,LEFT JOINRIGHT JOININNER JOIN 是常用的三种连接方式,它们的主要区别如下:

JOIN 类型保留哪张表的数据?未匹配的数据填充 NULL 吗?
INNER JOIN只保留两张表匹配的数据❌ 不保留未匹配数据
LEFT JOIN保留左表的所有数据✅ 右表未匹配的行填充 NULL
RIGHT JOIN保留右表的所有数据✅ 左表未匹配的行填充 NULL

🌟 示例数据

假设有两张表:

students(学生表)

student_idnameclass_id
1张三101
2李四102
3王五103
4赵六NULL

classes(班级表)

class_idclass_name
101数学班
102物理班

1️⃣ INNER JOIN(内连接)

只返回两张表都匹配的数据,不匹配的行不会出现。

SELECT s.student_id, s.name, c.class_name FROM students s INNER JOIN classes c ON s.class_id = c.class_id;

🔹 查询结果(只显示 class_id 匹配的数据):

student_idnameclass_name
1张三数学班
2李四物理班

🚨 没有 王五赵六,因为它们的 class_id 没有匹配的 class_name


2️⃣ LEFT JOIN(左连接)

保留 students(左表)所有数据classes(右表)中匹配不到的填充 NULL

SELECT s.student_id, s.name, c.class_name FROM students s LEFT JOIN classes c ON s.class_id = c.class_id;

🔹 查询结果

student_idnameclass_name
1张三数学班
2李四物理班
3王五NULL
4赵六NULL

王五赵六 没有匹配到 class_name,所以 class_name 显示 NULL,但仍然保留。


3️⃣ RIGHT JOIN(右连接)

保留 classes(右表)所有数据students(左表)匹配不到的填充 NULL

SELECT s.student_id, s.name, c.class_name FROM students s RIGHT JOIN classes c ON s.class_id = c.class_id;
 

🔹 查询结果

student_idnameclass_name
1张三数学班
2李四物理班

这里的结果和 INNER JOIN 一样,因为 RIGHT JOIN 保留 classes 的所有数据,但 classes 里的 class_idstudents 里都有匹配,所以 RIGHT JOININNER JOIN 结果相同。


🌟 总结

JOIN 类型结果适用场景
INNER JOIN只保留匹配的行仅需要两张表都有的数据
LEFT JOIN保留左表所有数据,右表没有的填 NULL左表数据是主要的,右表只是补充信息
RIGHT JOIN保留右表所有数据,左表没有的填 NULL右表数据是主要的,左表只是补充信息

LEFT JOINRIGHT JOIN 是可以互换的,只需要调换表的位置,但大部分情况下 LEFT JOIN 更常用,因为查询的主表通常是左表。

🔥 重点

  • INNER JOIN 只返回两表都匹配的数据(最严格)。
  • LEFT JOIN 确保左表所有行都返回,右表没有匹配数据时,填充 NULL(最常用)。
  • RIGHT JOIN 确保右表所有行都返回,左表没有匹配数据时,填充 NULL(很少用)。

🚀 实际开发中LEFT JOIN 用得最多RIGHT JOIN 只是 LEFT JOIN 的变形,INNER JOIN 适用于完全匹配的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值