SQL Server 习题连载合集

308 阅读3分钟

student表

sno sname sex sage sdept birthday
1 20001 李勇 20 管理学 2000-03-02
2 20002 刘能 19 计算机 2001-03-02
3 20003 赵四 18 计算机 2002-03-02
4 20004 长贵 17 电子 2003-03-02
5 20005 大脚 20 电子 2000-03-02
6 20006 唐三 21 机械 1999-03-02
7 20007 萧炎 22 机械 1999-03-02

course表

cno cname cpno(先修课) credit tid
1 101 操作系统 102 2 3004
2 102 数据结构 103 6 3003
3 103 Java基础 null 2 3001
4 104 Java虚拟机 103 2 3001
5 105 Java并发编程 104 2 3001
6 106 Android开发 103 4 3002
7 107 计算机网络 null 2 3003

sc表(选课表)

sno cno grade
1 20001 103 90
2 20001 104 80
3 20001 105 70
4 20001 106 80
5 20001 102 70
6 20002 103 88
7 20002 102 78
8 20002 101 68
9 20002 107 98
... ... ... ...

teacher表

tid tname depart
1 3001 盖聂 计算机学院
2 3002 韩非 计算机学院
3 3004 张良 计算机学院
4 3005 白起 机械学院
5 3006 嬴政 机械学院
6 3007 高渐离 机械学院

习题

1.查询同时选修数据结构(102)和 Java 基础(103)的学生,并且数据结构成绩更高的学生姓名及两门课程的分数。(为了降低代码复杂度,已知数据结构课号为102,java基础课号为103)

select s.sname, t1.grade as 数据结构, t2.grade java基础
from student as s,
	 sc as t1, 
	 sc as t2
where s.sno = t1.sno and s.sno = t2.sno 
and t1.cno = '102' and t2.cno = '103'   
and t1.grade > t2.grade

2.查询各科成绩最高分、最低分和平均分

select c.cname,MAX(grade) maxgrade, 
				MIN(grade) mingrade, 
				AVG(grade) avggrade
from course c, sc
where c.cno = sc.cno
group by c.cname

3.查询两门及其以上不及格课程的同学的学号,姓名

select s.sno, sname
from student s, sc
where s.sno = sc.sno and grade < 60
group by s.sno, sname
having count(grade) >= 2

4.查询操作系统分数小于 60的学生,按分数降序排列的学生信息

select s.*
from student s, sc, course c
where s.sno = sc.sno and c.cno = sc.cno
and c.cname = '操作系统'

5.查询总成绩大于500分的学生姓名

select s.sname
from student s, sc
where s.sno = sc.sno
group by s.sname
having SUM(grade) > 500

6.查询每个专业的名称以及专业的人数

select sdept , count(sdept) as 专业人数
from student
group by sdept