数据库题库(2)

2018-12-17 14:20

课程表:Course(Cno,Cname,Credit,Semester), 选课表:SC(Sno,Cno,Grade)

统计每个学生的选课门数(包括没有选课的学生),列出学号、选课门数和选课情况,其中选课情况显示规则如下:

如果选课门数大于等于6,则选课情况为“多”; 如果选课门数在3~5,则选课情况为“一般”; 如果选课门在1~2,则选课情况为“偏少”。 如果没有选课,则选课情况为“未选课”。

select s.sno,count(sc.cno) 选课门数, 选课情况 = case when count(sc.cno) >= 6 then '多'

when count(sc.cno) between 3 and 5 then '一般' when count(sc.cno) between 1 and 2 then '偏少' else '未选' end

from student s left join sc on s.sno = sc.sno group by s.sno

设有学生表:Student(Sno,Sname,Ssex,Sage,Sdept), 课程表:Course(Cno,Cname,Credit,Semester), 选课表:SC(Sno,Cno,Grade)

统计每个系Java课程的考试情况,列出系名和考试情况,其中考试情况为: 如果Java平均成绩大于等于90,则考试情况为“好”; 如果Java平均成绩在80~89分,则考试情况为“良好”; 如果Java平均成绩在70~79分,则考试情况为“一般”; 如果Java平均成绩低于70分,则考试情况为“较差”。 select sdept,考试情况 = case

when avg(grade) >= 90 then '好'

when avg(grade) between 80 and 89 then '良好' when avg(grade) between 70 and 79 then '一般' when avg(grade) < 70 then '较差' end

from student s join sc on s.sno = sc.sno join course c on c.cno = sc.cno where cname = 'Java' group by sdept

设有学生表:Student(Sno,Sname,Ssex,Sage,Sdept), 课程表:Course(Cno,Cname,Credit,Semester), 选课表:SC(Sno,Cno,Grade)

修改全部课程的学分,修改规则如下:

如果是第1~2学期开设的课程,则学分增加5分; 如果是第3~4学期开设的课程,则学分增加3分; 如果是第5~6学期开设的课程,则学分增加1分; 其他学期开设的课程学分不变。 update course set credit = credit + case when semester in (1,2) then 5 when semester in (3,4) then 3 when semester in (5,6) then 1 else 0 End

为描述乘客对车票的订票情况,定义了三张表:车票表、乘客表和订票情况表,各表结构如下:

1.乘客表

乘客编号:小整型,主键。

姓名:普通编码定长字符型,10位长,非空。

身份证号:普通编码定长字符型,6位长,第一位取值为1,后五位取值均为0~9的整数。

2.车票表

车次:普通编码定长字符型,4位长,主键。 票价 :整数,非空。

起点:普通编码定长字符型,最多存4个汉字。 终点:普通编码定长字符型,最多存4个汉字。

种类:统一字符编码定长字符型,最多存2个汉字,取值范围为:{直达、特快、普快、慢车}。;

发车时间:普通编码定长字符型,5位长,取值格式为:2位时:2位分,其中时和分可以是任何字符。

3. 订票表

乘客编号:小整型,非空。

车次:普通编码定长字符型,4位长,非空。 订票日期:日期型,非空。

订票数量:小整型,默认值为1。 其中:(乘客编号,车次,订票日期)为主键。

乘客编号为引用乘客表的外键,车次为引用车票表的外键。

写出创建这三张表的SQL语句,要求在创建表时定义表中的全部约束。 CREATE TABLE 乘客表(

乘客编号 smallint primary key, 姓名 char(10) not null,

身份证号 char(6) check (身份证号 like '1[0-9][0-9][0-9][0-9][0-9]'))

create table 车票表(

车次 char(4) primary key, 票价 int not null, 起点 char(8) , 终点 char(8),

种类 nchar(2) check (种类 in('直达','特快','普快','慢车')), 发车时间 char(5) check (发车时间 like '__:__'))

create table 订票表(

乘客编号 smallint not null, 车次 char(4) not null,

订票日期 smalldatetime not null, 订票数量 smallint default 1,

primary key(乘客编号,车次,订票日期),

foreign key(乘客编号) references 乘客表(乘客编号), foreign key(车次) references 车票表(车次))

设有学生表:Student(Sno,Sname,Ssex,Sage,Sdept), 课程表:Course(Cno,Cname,Credit,Semester), 选课表:SC(Sno,Cno,Grade)

查询Java考试成绩最高的前三个成绩,列出学生姓名、所在系和成绩(包括并列情况)。 select top 3 with ties sname,sdept,grade from student s join sc on s.sno = sc.sno join course c on c.cno = sc.cno where canme='Java' order by grade desc

设有学生表:Student(Sno,Sname,Ssex,Sage,Sdept), 课程表:Course(Cno,Cname,Credit,Semester), 选课表:SC(Sno,Cno,Grade)

统计每个学生的选课门数(包括没选课的学生),并按选课门数降序显示结果。 select s.sno,count(sc.cno) 选课门数 from Student s left join SC on s.sno = SC.sno group by s.sno order by count(sc.cno) asc

设有学生表:Student(Sno,Sname,Ssex,Sage,Sdept), 课程表:Course(Cno,Cname,Credit,Semester), 选课表:SC(Sno,Cno,Grade)

查询计算机系总成绩超过200分的学生的学号和总成绩。

select s.sno,sum(grade) 总成绩 from student s join sc on s.sno = sc.sno group by s.sno having sum(grade) > 200

设有学生表:Student(Sno,Sname,Ssex,Sage,Sdept), 课程表:Course(Cno,Cname,Credit,Semester), 选课表:SC(Sno,Cno,Grade)

列出“Java”考试成绩前三名(包括并列情况)的学生的学号、姓名、所在系和Java考试成绩。

select top 3 with ties s.sno,sname,sdept,grade from student s join sc on s.sno = sc.sno join course c on c.cno = sc.cno where cname = 'Java' order by grade desc

设有学生表:Student(Sno,Sname,Ssex,Sage,Sdept), 课程表:Course(Cno,Cname,Credit,Semester), 选课表:SC(Sno,Cno,Grade)

查询第3学期开设的没人选的课程,列出课程名和学分。(请用子查询实现) select cname,credit from course

where cno not in ( select cno from sc) and semester = 3

设有学生表:Student(Sno,Sname,Ssex,Sage,Sdept), 课程表:Course(Cno,Cname,Credit,Semester), 选课表:SC(Sno,Cno,Grade) 查询计算机系学生中,考试成绩高于计算机系学生总平均成绩的学生的姓名、考试的课程名和成绩。

select sname,cname,grade from student s join sc on s.sno = sc.sno join course c on c.cno = sc.cno

where sdept = '计算机系' and grade < (

select avg(grade) from sc join student s on s.sno = sc.sno where sdept = '计算机系')

设有学生表:Student(Sno,Sname,Ssex,Sage,Sdept), 课程表:Course(Cno,Cname,Credit,Semester), 选课表:SC(Sno,Cno,Grade)

查询Java考试成绩最低的学生的姓名、所在系和Java成绩。

select top 1 with ties sname,sdept,grade from student s join sc on s.sno = sc.sno join course c on c.cno = sc.cno where cname = 'Java' order by grade asc

设有学生表:Student(Sno,Sname,Ssex,Sage,Sdept), 课程表:Course(Cno,Cname,Credit,Semester), 选课表:SC(Sno,Cno,Grade)

查询计算机系Java考试成绩高于Java总平均成绩的学生姓名。 select sname from student S join sc on s.sno = sc.sno join course c on c.cno = sc.cno

where sdept = '计算机系' and cname = 'Java' and grade > ( select avg(grade) from sc join course c on c.cno = sc.cno where cname = 'Java')

设有学生表:Student(Sno,Sname,Ssex,Sage,Sdept), 课程表:Course(Cno,Cname,Credit,Semester), 选课表:SC(Sno,Cno,Grade)

查询平均成绩大于80的课程的课程名、学分和开课学期。 select cname,credit,semester from course where cno in (

select cno from sc group by cno having avg(grade) > 80 )

设有学生表:Student(Sno,Sname,Ssex,Sage,Sdept), 课程表:Course(Cno,Cname,Credit,Semester), 选课表:SC(Sno,Cno,Grade)

统计每门课程的选课人数,包括没有人选的课程,列出课程号、选课人数及选课情况,其中选课情况为:如果此门课程的选课人数超过100人,则显示“人多”;如果此门课程的选课人数在40~100,则显示“一般”;如果此门课程的选课人数在1~40,则显示“人少”;如果此门课程没有人选,则显示“无人选”。 select c.cno,count(sc.cno) 选课人数, case when count(sc.cno) > 100 then '人多'

when count(sc.cno) between 40 and 100 then '一般' when count(sc.cno) between 1 and 40 then '人少' else '无人选' end 选课情况

from course c left join sc on c.cno = sc.cno group by c.cno

设有学生表:Student(Sno,Sname,Ssex,Sage,Sdept), 课程表:Course(Cno,Cname,Credit,Semester), 选课表:SC(Sno,Cno,Grade)


数据库题库(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2016-2017年新北师大版数学四年级上册上学期第六单元方向与位置

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: