1 建表语句
create table SC
(
CNO NUMBER,//课程号
SNO NUMBER,//学员号
GRADE NUMBER//得分
)
create table STUDENT
(
SNO NUMBER not null,//学员号
SNAME VARCHAR2(40),//学生姓名
SAGE NUMBER,//年龄
SSEX VARCHAR2(10)//性别
)
create table COURSE
(
CNO NUMBER,//课程号
CNAME VARCHAR2(40),课程名
CPNO NUMBER,
CCREDIT NUMBER,学分
TEACHER VARCHAR2(20)老师
)
2 部分一
1. 查询‘陈东’老师教授的课程和课程号
select cno,cname from course where teacher='陈东';//注意是单引号
2. 查询年纪大于23岁的男生信息
select * from student where ssex='男' and sage >23
3. 查询至少选修‘陈东’老师的一门课程的女生
Select sname from student where Ssex='女'and sno in(select sno from sc where cno in(select cno from course where teacher='陈东'))
3 部分二
1. 统计所有学生选修的课程门数
select count(distinct(cno)) from sc
2. 统计每门课程选修的人数
select count(sno) as 选修数,cno as 课程号 from sc group by cno
3. 求‘陈东’老师所教授的每门课程的平均成绩和总人数
select count(sc.cno),sc.cno,avg(sc.grade) from sc,course where sc.cno=course.cno and course.teacher='陈东' group by sc.cno
4. 统计选修课程2的同学的平均成绩
select avg(grade) from sc where cno=2
5. 统计每门课程的学生人数(要求超过2人才统计)要求输出课程号和选修人数,结果按照人数的降序排序,人数相同的话按照课程号升序排序
Select cno,count(sno)from SC group by cno having count(sno)>2 order by 2 desc, 1
6. 查询姓名以朱开头的所有学生
select * from student where sname like '朱%'
7. 找出年纪大于女生平均年纪的男生
select * from student where Ssex='男' and Sage>(select avg(Sage) from student where Ssex='女')
8. 找出在SC表没有成绩,但是在Student中存在的学生
select * from student where sno not in(select sno from sc ) and sno in(select sno from sc where grade is null)
4 部分三:
1. 查询选修总学分在10学分以下的学生姓名
select sc.sno,sum(course.ccredit) from sc,course where sc.cno=course.cno group by sc.sno having sum(course.ccredit)<10//sum求和,count统计记录数