MySQL | join on、inner join、left join on和right join的区别及示例

本文详细介绍了MySQL中的JOIN、LEFTJOIN和INNERJOIN操作,阐述了它们如何处理匹配和不匹配的记录,以及在不同场景下的适用性。
摘要由CSDN通过智能技术生成

在MySQL中,JOINLEFT JOININNER JOIN 都是用于根据两个或多个表之间的相关列之间的关系,从这些表中查询数据的SQL操作。它们之间的主要区别在于如何处理不匹配的记录。

  1. INNER JOIN (或 JOIN)

INNER JOIN 返回两个表中都有的记录。换句话说,它只返回那些在两个指定的表中有匹配的行。如果某行在其中一个表中没有匹配项,则不会出现在结果集中。

示例

假设我们有两个表:studentsscores

students 表:

idname
1Alice
2Bob
3Carol

scores 表:

student_idscore
190
285
492

如果我们想查询每个学生的分数,我们可以使用 INNER JOIN

SELECT students.name, scores.score 
FROM students 
INNER JOIN scores ON students.id = scores.student_id;

结果集:

namescore
Alice90
Bob85

注意,Carol没有出现在结果集中,因为她在 scores 表中没有分数。同样,分数为92的学生也没有出现在结果集中,因为他在 students 表中没有记录。
2. LEFT JOIN (或 LEFT OUTER JOIN)

LEFT JOIN 返回左表中的所有记录,以及右表中匹配的记录。如果左表的某行在右表中没有匹配项,则结果集中右表的部分将包含NULL。

使用上面的 studentsscores 表为例:

SELECT students.name, scores.score 
FROM students 
LEFT JOIN scores ON students.id = scores.student_id;

结果集:

namescore
Alice90
Bob85
CarolNULL

在这里,Carol虽然没有分数,但仍然出现在结果集中,因为 LEFT JOIN 保证了左表(students)的所有记录都会被返回。
3. RIGHT JOIN (或 RIGHT OUTER JOIN)

RIGHT JOINLEFT JOIN 相反,它返回右表中的所有记录,以及左表中匹配的记录。如果右表的某行在左表中没有匹配项,则结果集中左表的部分将包含NULL。在实际应用中,RIGHT JOIN 使用得较少,因为通常可以通过调整表的位置和使用 LEFT JOIN 来达到相同的效果。

对于上面的 studentsscores 表,如果我们使用 RIGHT JOIN

SELECT students.name, scores.score 
FROM students 
RIGHT JOIN scores ON students.id = scores.student_id;

结果集:

namescore
Alice90
Bob85
NULL92

在这里,分数为92的学生虽然没有在 students 表中的记录,但仍然出现在结果集中,因为 RIGHT JOIN 保证了右表(scores)的所有记录都会被返回。

总之,选择哪种 JOIN 类型取决于你的查询需求和你想要从结果集中获取哪些数据。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值