学生,课程表, 学生选课表 查询——面试题

本文深入探讨了使用SQL进行复杂查询的方法,包括如何找出未选特定教师课程的学生、列出多门课程不及格的学生及其平均成绩,以及筛选同时选修两门特定课程的学生名单。通过逐步解析SQL语句,读者将掌握利用子查询和连接操作来解决实际问题的技能。

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

1.找出 没选过“黎明” 老师的所有学生姓名

1)选择出黎明老师的课程编号
select cno from C where cteacher="黎明";

2)根据C表查询出来课程编号的结果,在SC学生选课表查出选黎明老师课程的学号
select sno from SC where cno=(select cno from C where cteacher="黎明");

3)然后依据以上结果在S表中查询
select sname from sno=(select sno from SC where cno=(select cno from C where cteacher="黎明"))

2. 列出2门以上(含2门)不及格学生姓名及平均成绩

1)查出学生的平均成绩
select sno, avg(scgrade) as avgscore form SC group by sno;

2)查询出2门及以上不及格的学生及姓名
select sno, scgrade from SC inner join S on SC.sno=S.sno where sc.scgrade<60 group by SC.sno,S.sname haveing count(*)>=2;

3) 
select t1.sname, t2.avgscore from 
(select sno, scgrade from SC inner join S on SC.sno=S.sno where sc.scgrade<60 group by SC.sno,S.sname haveing count(*)>=2;) t1 
inner join
(select sno, avg(scgrade) as avgscore form SC group by sno) t2
on 
t1.son=t2.son;

3. 即学过1号课程又学过2号课程所有学生的姓名

1) 查到选课为1的学生学号
select sno from SC where cno=1;
2)查到选课为2的学生学号
select sno from SC where cno=2;
3)
select sname from 
SC join S
on 
SC.sno=S.sno 
where 
SC.cno=1 and SC.sno in (select sno from SC where cno=2);

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值