数据库原理与应用教程(何玉洁 编著)——第四章习题写法

/*数据库原理与应用教程(何玉洁 编著)——第四章习题写法

    数据表基于书中所给数据,部分题只写了一种写法

    如有错误,请雅正-。-

*/

目录

1.查询学生选课表中的全部数据

2.查询计算机系的学生的姓名、年龄。

3.查询成绩在70~80分之间的学生的学号、课程号和成绩。

4.查询计算机系年龄在18~20之间且性别为“男”的学生的姓名、年龄。

5.查询课程号为“c001”的课程的最高的分数。

6.查询计算机系学生的最大年龄和最小年龄。

7.统计每个系的学生人数。

8.统计每门课程的选课人数和考试最高分。

9.统计每个学生的选课门数和考试总成绩,并按选课门数升序显示结果。

10.查询总成绩超过200分的学生,要求列出学号、总成绩。

11.查询选修了“c002”号课程的学生的姓名和所在系。

12.查询成绩80分以上的学生的姓名、课程号和成绩,并按成绩降序排列结果。

13.查询哪些学生没有选课,要求列出学号、姓名和所在系。

14.查询与Java在同一学期开设的课程的课程名和开课学期。

15.查询与李勇年龄相同的学生的姓名、所在系和年龄。

子查询

自连接

         16.用子查询实现如下查询:

        (1)查询选修了“c001”号课程的学生的姓名和所在系。

        (2)查询数学系成绩80分以上的学生的学号、姓名、课程号和成绩。

        (3)查询计算机系考试成绩最高的学生的姓名。

        (4)查询数据结构考试成绩最高的学生的姓名、所在系、性别和成绩。

17.查询没有选修Java课程的学生的姓名和所在系。

18.查询计算机系没有选课的学生的姓名和性别。

19.创建一个新表,表名为test_1,其结构为(COL1,COL2,COL3),其中......

20.删除考试成绩低于50分的学生的选课记录。

还原数据

21.删除没有人选的课程记录。

还原数据

22.删除计算机系Java成绩不及格学生的Java选课记录。

23.将第2学期开设的所有课程的学分增加2分。

还原数据

24.将Java课程的学分改为3分。

还原数据

25.将计算机系学生的年龄增加1岁。

还原数据

26.将信息系学生的“计算机文化学”课程的考试成绩加5分。

子查询

多表连接

还原数据

27.查询每个系年龄大于等于20的学生人数,并将结果保存到一个新永久表Dept_ Age中。

28.查询计算机系每个学生的Java考试情况,列出学号、姓名、成绩和成绩情况......

29.统计每个学生的选课门数(包括没有选课的学生),列出学号、选课门数和选课情况......

30.修改全部课程的学分......

还原数据

31.查询“李勇”和“王大力”所选的全部课程,列出课程名、开课学期和学分,不包括重复的结果。

32.查询在第3学期开设的课程中,“李勇”选了但“王大力”没选的课程,列出课程名和学分。

33.查询在学分大于3分的课程中,“李勇”和“王大力”所选的相同课程,列出课程名和学分。


1.查询学生选课表中的全部数据

select * from SC

2.查询计算机系的学生的姓名、年龄。

select Sname, Sage from Student
where Sdept = '计算机系'

3.查询成绩在70~80分之间的学生的学号、课程号和成绩。

select Sno, Cno, Grade from SC
where 70<= Grade and Grade<= 80

4.查询计算机系年龄在18~20之间且性别为“男”的学生的姓名、年龄。

select Sname, Sage, Ssex from Student
where Sdept = '计算机系' and Sage between 18 and 20 and Ssex = '男'

5.查询课程号为“c001”的课程的最高的分数。

select top 1 Grade from SC
where Cno = 'c001'

6.查询计算机系学生的最大年龄和最小年龄。

select max(Sage) 最大年龄, min(Sage) 最小年龄 from Student
where Sdept = '计算机系'

7.统计每个系的学生人数。

select Sdept, count(Sno) 学生人数 from Student
group by Sdept

8.统计每门课程的选课人数和考试最高分。

select Cno,count(Sno) 选课人数, max(Grade) 考试最高分 from SC
group by Cno

9.统计每个学生的选课门数和考试总成绩,并按选课门数升序显示结果。

select Sno, count(*) 选课门数, sum(Grade) 考试总成绩 from SC
group by Sno
order by count(*)

10.查询总成绩超过200分的学生,要求列出学号、总成绩。

select Sno, sum(Grade) 总成绩 from SC
group by Sno
having sum(Grade)> 200

11.查询选修了“c002”号课程的学生的姓名和所在系。

select Sname, Sdept from Student
join SC on Student.Sno = SC.Sno
where Cno = 'c002'

12.查询成绩80分以上的学生的姓名、课程号和成绩,并按成绩降序排列结果。

select Sname, Cno, Grade from SC
join Student S on S.Sno = SC.Sno
where Grade>= 80
order by Grade desc

13.查询哪些学生没有选课,要求列出学号、姓名和所在系。

select S.Sno, Sname, Sdept from Student S
left join SC on S.Sno = SC.Sno
where SC.Sno is NULL

14.查询与Java在同一学期开设的课程的课程名和开课学期。

select distinct C1.Cname, C1.Semester from Course C1
join Course C2 on C1.Semester = C2.Semester
where C2.Semester = 3

15.查询与李勇年龄相同的学生的姓名、所在系和年龄。

子查询

select Sname, Sdept, Sage from Student
where Sage in(
    select Sage from Student
    where Sname = '李勇')
    and Sname != '李勇'

自连接

select S1.Sname, S1.Sdept, S1.Sage from Student S1
join Student S2 on S1.Sage = S2.Sage
where S2.Sname = '李勇' and S1.Sname != '李勇'

16.用子查询实现如下查询:

        (1)查询选修了“c001”号课程的学生的姓名和所在系。

select Sname, Sdept from Student
where Sno in(
    select Sno from SC
    where Cno = 'c001')

        (2)查询数学系成绩80分以上的学生的学号、姓名、课程号和成绩。

select S.Sno, Sname, Cno, Grade from Student S
join SC on S.Sno = SC.Sno
where S.Sno in(
    select Sno from Student
    where Sdept = '数学系'and Grade>= 80)

        (3)查询计算机系考试成绩最高的学生的姓名。

select Sname from Student S
join SC on S.Sno = SC.Sno
where Sdept = '计算机系'
and Grade in(
    select max(Grade) from SC
    where Sdept = '计算机系')


        (4)查询数据结构考试成绩最高的学生的姓名、所在系、性别和成绩。

select Sname, Sdept, Ssex, Grade from Student S
join SC on S.Sno = SC.Sno
join Course C on SC.Cno = C.Cno
where C.Cname = '数据结构'
and Grade in(
    select max(Grade) from SC
    where Cname = '数据结构')

17.查询没有选修Java课程的学生的姓名和所在系。

select Sname, Sdept from Student
where Sno not in(
    select Sno from SC
    join Course on SC.Cno = Course.Cno
    where Cname = 'Java')

18.查询计算机系没有选课的学生的姓名和性别。

select Sname, Ssex from Student S
left join SC on S.Sno = SC.Sno
where Sdept = '计算机系' and SC.Cno is NULL

19.创建一个新表,表名为test_1,其结构为(COL1,COL2,COL3),其中:
    COL1:整型,允许空值。
    COL2:字符型,长度为10,不允许空值。
    COL3:字符型,长度为10,允许空值。
    试写出按行插入如下数据的语句(空白处表示空值)。

COL1COL2COL3
         B1
1B2C2
2B3
create table test_1(
COL1    int,
COL2    char(10)    not null,
COL3    char(10),
)

insert into test_1(COL2) values('B1')
insert into test_1 values(1, 'B2', 'C2')
insert into test_1 values(2, 'B3', NULL)

20.删除考试成绩低于50分的学生的选课记录。

delete from SC
where Grade< 50

还原数据

insert into SC values(1531101, 'c007', 45)

21.删除没有人选的课程记录。

delete from Course
where Cno not in(select Cno from SC)

还原数据

insert  into    Course values('c004','大学英语',6,2)
insert  into    Course values('c010','计算机网络',5,6)

22.删除计算机系Java成绩不及格学生的Java选课记录。

delete from SC
where Grade< 60 and Sno in(
    select Sno from Student
    where Sdept = '计算机系')
    and Cno in(
        select Cno from Course
        where Cname = 'Java')

23.将第2学期开设的所有课程的学分增加2分。

update Course set Credit = Credit+ 2
where Semester in(
    select Semester from Course
    where Semester = '2')

还原数据

update Course set Credit = Credit- 2
where Semester = '2'

24.将Java课程的学分改为3分。

update Course set Credit = 3
where Cname = 'Java'

还原数据

update Course set Credit = 2
where Cname = 'Java'

25.将计算机系学生的年龄增加1岁。

update Student set Sage = Sage+ 1
where Sdept = '计算机系'

还原数据

update Student set Sage = Sage- 1
where Sdept = '计算机系'

26.将信息系学生的“计算机文化学”课程的考试成绩加5分。

子查询

update SC set Grade = Grade+ 5
where Sno in(
    select Sno from Student
    where Sdept = '信息系')
    and Cno in(
    select Cno from Course
    where Cname = '计算机文化学')

多表连接

update SC set Grade = Grade+ 5
from SC join Student S on SC.Sno = S.Sno
join Course C on SC.Cno = C.Cno
where Sdept = '信息系' and Cname = '计算机文化学' 

还原数据

update SC set Grade = 82
where Sno = '1521102' and Cno = 'c001'

27.查询每个系年龄大于等于20的学生人数,并将结果保存到一个新永久表Dept_ Age中。

select Sdept, count(*) 学生人数 into Dept_Age from Student
where Sage>= 20
group by Sdept

28.查询计算机系每个学生的Java考试情况,列出学号、姓名、成绩和成绩情况,
    其中成绩情况的显示规则为:
    如果成绩大于等于90,则成绩情况为“好”;
    如果成绩在80~89,则成绩情况为“较好”;
    如果成绩在70~79,则成绩情况为“一般”;
    如果成绩在60~69,则成绩情况为“较差”;
    如果成绩小于60,则成绩情况为“差”。

select Student.Sno, Sname, Grade, 成绩情况=
    case 
        when grade>= 90 then '好'
        when grade between 80 and 80    then '较好'
        when grade between 70 and 79    then '一般'
        when grade between 60 and 69    then '较差'
        else '差'
    end
    from Student right join SC on Student.Sno = SC.Sno
    join Course on Course.Cno = SC.Cno
    where Sdept = '计算机系' and Cname = 'Java'

29.统计每个学生的选课门数(包括没有选课的学生),
    列出学号、选课门数和选课情况,
    其中选课情况显示规则为:
    如果选课门数大于等于6门,则选课情况为“多”;
    如果选课门数超过在3~5门,则选课情况为“一般”;
    如果选课门数在1~2门,则选课情况为“偏少”;
    如果没有选课,则选课情况为“未选课”。

select S.Sno, count(Cno) 选课门数, case
    when count(Cno)>= 6        then '多'
    when count(Cno)>= 3        then '一般'
    when count(Cno)>= 1        then '偏少'
    else '未选课'
end 选课情况
from Student S left join SC on S.Sno = SC.Sno
group by S.Sno
order by count(Cno) desc

30.修改全部课程的学分,
    修改规则如下:
    如果是第1~2学期开设的课程,则学分增加5分;
    如果是第3~4学期开设的课程,则学分增加3分;
    如果是第5~6学期开设的课程,则学分增加1分;
    对其他学期开设的课程,学分不变。

update Course set Credit = Credit+ case
        when Semester between 1 and 2    then '5'
        when Semester between 3 and 4    then '3'
        when Semester between 5 and 6    then '1'
        else '0'
    end

还原数据

update Course set Credit = Credit- case
        when Semester between 1 and 2    then '5'
        when Semester between 3 and 4    then '3'
        when Semester between 5 and 6    then '1'
        else '0'
    end

31.查询“李勇”和“王大力”所选的全部课程,列出课程名、开课学期和学分,不包括重复的结果。

select Cname, Semester, Credit
from Course join SC on Course.Cno = SC.Cno
join Student on Student.Sno = SC.Sno
where Sname = '李勇'
union
select Cname, semester, Credit
from Course join SC on Course.Cno = SC.Cno
join Student on Student.Sno = SC.Sno
where Sname = '王大力'

32.查询在第3学期开设的课程中,“李勇”选了但“王大力”没选的课程,列出课程名和学分。

select Cname, Credit
from Course join SC on Course.Cno = SC.Cno
join Student on Student.Sno = SC.Sno
where Sname = '李勇' and Semester= 3
except
select Cname, Credit
from Course join SC on Course.Cno = SC.Cno
join Student on Student.Sno = SC.Sno
where Sname = '王大力'

33.查询在学分大于3分的课程中,“李勇”和“王大力”所选的相同课程,列出课程名和学分。

select Cname, Credit 
from Course join SC on Course.Cno = SC.Cno
join Student on Student.Sno = SC.Sno
where Sname = '李勇' and Credit> 3
intersect
select Cname, Credit 
from Course join SC on Course.Cno = SC.Cno
join Student on Student.Sno = SC.Sno
where Sname = '王大力' 

  • 10
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 .试述数据、数据库数据库系统、数据库管理系统的概念。 答: ( l )数据( Data ) :描述事物的符号记录称为数据。数据的种类有数字、文字、图形、图像、声音、正文等。数据与其语义是不可分的。解析在现代计算机系统中数据的概念是广义的。早期的计算机系统主要用于科学计算,处理的数据是整数、实数、浮点数等传统数学中的数据。现代计算机能存储和处理的对象十分广泛,表示这些对象的数据也越来越复杂。数据与其语义是不可分的。 500 这个数字可以表示一件物品的价格是 500 元,也可以表示一个学术会议参加的人数有 500 人,还可以表示一袋奶粉重 500 克。 ( 2 )数据库( DataBase ,简称 DB ) :数据库是长期储存在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。 ( 3 )数据库系统( DataBas 。 Sytem ,简称 DBS ) :数据库系统是指在计算机系统中引入数据库后的系统构成,一般由数据库数据库管理系统(及其开发工具)、应用系统、数据库管理员构成。解析数据库系统和数据库是两个概念。数据库系统是一个人一机系统,数据库数据库系统的一个组成部分。但是在日常工作中人们常常把数据库系统简称为数据库。希望读者能够从人们讲话或文章的上下文中区分“数据库系统”和“数据库”,不要引起混淆。 ( 4 )数据库管理系统( DataBase Management sytem ,简称 DBMs ) :数据库管理系统是位于用户与操作系统之间的一层数据管理软件,用于科学地组织和存储数据、高效地获取和维护数据。 DBMS 的主要功能包括数据定义功能、数据操纵功能、数据库的运行管理功能、数据库的建立和维护功能。解析 DBMS 是一个大型的复杂的软件系统,是计算机中的基础软件。目前,专门研制 DBMS 的厂商及其研制的 DBMS 产品很多。著名的有美国 IBM 公司的 DBZ 关系数据库管理系统和 IMS 层次数据库管理系统、美国 Oracle 公司的 orade 关系数据库管理系统、 s 油 ase 公司的 s 油 ase 关系数据库管理系统、美国微软公司的 SQL Serve ,关系数据库管理系统等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值