MySql 联表查询 Join ON详解

本文详细探讨了MySQL中的JOIN操作,包括INNER JOIN、RIGHT JOIN和LEFT JOIN的区别,并通过实例展示了不同JOIN类型的查询结果。重点讲解了LEFT JOIN如何返回左表所有信息,即使对应右表数据缺失也显示为NULL。此外,还提供了一个查询练习,旨在帮助读者理解如何根据需求选择合适的JOIN类型及设置判断条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Join 对比:

Student表:

Result表(成绩表): 

studentno:1098为无效人员。

Subject表:

 

区别对比:

操作描述
inner join如果两个表中至少有一个匹配,就返回行。左右两表交集。
left join会从左表中返回所有的值,即使右表中没有匹配。以左表为基准。
right join会从右表中返回所有的值,即使左表中没有匹配。以右表为基准。
-- 联表查询

-- 查询参加了考试的同学(学号,姓名,科目编号,分数)。需要从2个表里面查
select * from student;
select * from  result;

/*
1. 分析需求,分析查询的字段来自哪些表
2.确定使用哪种连接查询?7种
确定交叉点(这两个表中哪个数据是相同的)
判断的条件: 学生表中 studentNo = 成绩表中 studentNo 
*/

-- inner join

select s.studentno, studentname, subjectno, studentresult 
from student as s 
inner join result as r
on s.studentno = r.studentno

-- right join
select s.studentno, studentname, subjectno, studentresult 
from student s 
right join result r
on s.studentno = r.studentno

-- left join
select s.studentno, studentname, subjectno, studentresult 
from student s 
left join result r
on s.studentno = r.studentno

--查询缺考的同学
-- left join
select s.studentno, studentname, subjectno, studentresult 
from student s 
left join result r
on s.studentno = r.studentno
where studentResult is null


/*
1.在这里我们的左表是student表,右表是result表。
*/

inner join 查询结果为:

right join 查询结果为:

left join的查询结果:

(student(左表)里面返回所有的信息,即使有的人没有参加考试,依旧可以查询出来,但是为null)

 缺考的同学:

练习:(查询了参加考试的同学信息:学号 姓名 科目名称 分数)

/*
1. 分析需求,分析查询的字段来自哪些表 student result subject
2.确定使用哪种连接查询?
确定交叉点(这两个表中哪个数据是相同的)
判断的条件: 学生表(student)中 studentNo = 成绩表中 studentNo ,成绩表(result)中的subjectno=科目表(subject)的subjectno
*/

-- 查询了参加考试的同学信息(学号,学生姓名,科目名称,分数)
select s.studentno, studentname, subjectname, studentresult 
from student s 
INNER join result r
on s.studentno=r.studentno
INNER JOIN `subject` sub
ON r.subjectno=sub.subjectno

-- 我要查询哪些数据 select ...
-- 从哪几个表中查 from 表 XXX join 连接的表 on 交叉条件
-- 假设存在一种多张表查询,慢慢来,先查询两张表然后再慢慢增加

-- from a left join b   左为准
-- from a right join b	右为准

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值