Mysql学习7


  

1 测试表数据

有3个表S(学生表),C(课程表),SC(学生选课表)
S(SNO,SNAME)代表(学号,姓名)
C(CNO,CNAME,CTEACHER)代表(课号,课名,教师)
SC(SNO,CNO,SCGRADE)代表(学号,课号,成绩)

1.1 课程表

在这里插入图片描述

1.2 学生表

在这里插入图片描述

1.3 学生选课表

在这里插入图片描述

2 练习题

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

第一步;从c表中找出黎明老师的课程编号

select cno from c where cteacher = '黎明';

在这里插入图片描述
第二步:从sc表中找出选黎明老师的学生的学号

select sno from sc where cno = ( select cno from c where cteacher = '黎明');

在这里插入图片描述
第三步:从s表中选择sno不在上表中的学生姓名

select 
	sno,sname
from 
	s
where sno not in (select sno from sc where cno = ( select cno from c where cteacher = '黎明'));

在这里插入图片描述

2.2 列出2门以上(含2门)不及格(<60分的)学生姓名及平均成绩

第一步:找出不及格门数超过两门的学生姓名

select
		sc.sno ,s.sname 
from
		sc sc
join 
		s
on
		sc.sno = s.sno
where
		sc.scgrade < 60
group by
		sc.sno
having
		count(*) > 2;

在这里插入图片描述
第二步:求出每个学生的平均成绩

select
	sno,avg(scgrade)
from
	sc 
group by	
	sno;

在这里插入图片描述
第三步:将上边两张表进行表关联

select
	t1.*,t2.avggrade
from	
	 (....) t2
join
	
	 (....) t1
on
	t1.sno = t2.sno;

在这里插入图片描述

2.3 既学过1号课程又学过2号课所有学生的姓名

第一步:找出学了1号课的学生

select sno from sc where cno = 1;

在这里插入图片描述
第二步:在上边的学生中找出选了2号课的学生

select
	 sno 
from 
	sc 
where  cno = 2 and sno in (select sno from sc where cno = 1); 

在这里插入图片描述
第三步;在s表中找出学号在上表的学生姓名

select sname from s where sno in (t);

在这里插入图片描述
第三步还可以写成:将t表和学生表进行关联。

2.4 用一条SQL语句查询出每门课都大于80分的学生姓名

在这里插入图片描述

select 
	distinct name
from
	t_student
where
	name not in( select name from  t_student where(fenshu < 80));
select
	name
from
	t_student
group by
	name
having
	min(fenshu) > 80;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值