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