– 1、查询"01"课程比"02"课程成绩高的学生的信息(表列)及课程分数(两个表列)
select st.*,sc.s_score as ‘语文’ ,sc2.s_score ‘数学’
from student st
left join score sc on sc.s_id=st.s_id and sc.c_id=‘01’
left join score sc2 on sc2.s_id=st.s_id and sc2.c_id=‘02’
where sc.s_score>sc2.s_score
思路:
- 首先 select 的列名为 学生信息和 课程分数
student.* ,课程分数01 课程分数02
2. 需要的表from 学生表和课程表
student 和 score
3. 连接方式join 学生表为主表 课程表为副表 left join
4. 连接条件on s_id 和 c_id
5. 判断条件 where
– 2、查询"01"课程比"02"课程成绩低(列与列之间的比较可以使用where判断)的学生的信息(列名)及课程分数(列名)
select st.*,sc.s_score ‘语文’,sc2.s_score ‘数学’ from student st
left join score sc on sc.s_id=st.s_id and sc.c_id=‘01’
left join score sc2 on sc2.s_id=st.s_id and sc2.c_id=‘02’
where sc.s_score<sc2.s_score
– 3、查询平均成绩大于等于60分(having)的同学的学生编号(列表)和学生姓名(列表)和平均成绩(列表)
SELECT st.s_id,st.s_name,ROUND(AVG(sc.s_score),2) as “平均成绩”
FROM student st
LEFT JOIN score sc on sc.s_id = st.s_id
group by st.s_id
HAVING AVG(sc.s_score) >= 60
思路:
- select 学生编号 学生姓名 平均成绩
2.from 学生表和 成绩表 - 连接方式 左连接
各种join的区别
left join
right join
join
-6 查询 李姓老师的数量
分析题干 李姓(like ‘李%’)老师的数量(count)
select count(t_id)
from teacher
where t_name like ‘李%’ ;
-7 查询学过 ‘‘张三’’老师授课的同学的信息
分析题干 查询学过 ‘‘张三’’老师(where条件)授课的同学的信息(select 列名)
学生—》老师
student --> score --> course --> teacher
select stu.*
from student stu
join score sc on stu.s_id = sc.s_id
join course co on sc.c_id = co.c_id
join teacher te on co.t_id = te.t_id
where te.t_name = ‘张三’
-8 查询学过 ‘‘张三老师授课的同学的信息’’
分析题干 查询学过 ‘‘张三”老师(where 条件)授课的同学的信息(select 列名)
同学的id 在没有在老师教的学生id当中
方法一
select *
from student
where s_id not in (
select stu.s_id from
student stu
join score sc on stu.s_id = sc.s_id
join course co on sc.c_id =co.c_id
join teacher te on co.t_id = te.t_id
where te.t_name = ‘张三’
)
方法二
select st.*
from student st
where st.s_id not in(
select sc.s_id
from score sc
where sc.c_id in (
select c.c_id
from course c
left join teacher t on t.t_id=c.t_id
where t.t_name="张三"
)
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。