educoder 数据库原理与应用实验五

实验五 聚合查询

  • 数据结构说明
    • 第1关:查询统计一
    • 第2关:查询统计二
    • 第3关:查询统计三
    • 第4关:查询统计四

数据结构说明

表结构如下:

学生表:Student

字段名 类型 主码 备注
Sno char(10) Y 学号
Sname varchar(20) 姓名
Ssex char(2) 性别
Sage smallint 年龄
Sdept varchar(20) 所在系

课程表:Course

字段名 类型 主码 备注
Cno char(10) Y 课程号
Cname varchar(20) 课程名
Cpno char(10) 先行课号
Ccredit smallint 课程学分

学生选课表:SC

字段名 类型 主码 备注
Sno char(10) Y 学号
Cno char(10) Y 课程号
Grade smallint 成绩

第1关:查询统计一

任务描述
本关任务:使用聚合函数做查询练习

相关知识
使用SQL语言中的 Select 语句。
使用聚合函数完成查询练习
SQL语句中关键词大小写不区分。考虑到本系统的测评规则,在题目中要求对列名小写的,请务必按要求书写,否则会评判为错误!
性别用’m’表示男,’f’表示女

实验完成要求
根据代码区的提示,将查询数据的SQL语句书写在对应的代码区中。
注:请务必将select子句中出现的列名小写,顺序必须和题目要求一致
1、查询‘001’号的学生不及格的课程数,列出不及格课程数(列名为:scnt)
2、查询每个学生不及格的课程数,列出学号和不及格课程数(列名为:scnt)。
3、查询每个系女同学的平均年龄,列出所在系和平均年龄(列名为:sageavg)。

测试说明
书写查询语句后,直接测试。

sql语句
sql1:

USE CS_yx_DB
GO
SET NOCOUNT ON

-- ********** Begin ********** --
-- ********** 此处写“1、查询‘001’号的学生不及格的课程数,列出不及格课程数(列名为:scnt)”的SQL语句 ********** --
select count(Sno) as scnt from sc
where Sno='001' and Grade<60
group by Sno; 

-- ********** End ********** --

GO


sql2:

USE CS_yx_DB
GO
SET NOCOUNT ON

-- ********** Begin ********** --
-- ********** 此处写“2、查询每个学生不及格的课程数,列出学号和不及格课程数(列名为:scnt)”的SQL语句 ********** --
select sno,Count(Sno) as scnt from sc
where grade<60
group by Sno;


-- ********** End ********** --

GO

sql3:

USE CS_yx_DB
GO
SET NOCOUNT ON

-- ********** Begin ********** --
-- ********** 此处写“3、查询每个系女同学的平均年龄,列出所在系和平均年龄(列名为:sageavg)”的SQL语句 ********** --
select sdept,avg(sage) as sageavg from Student
where ssex='f'
group by sdept;

-- ********** End ********** --

GO

第2关:查询统计二

任务描述
本关任务:使用聚合函数做查询练习

相关知识
使用SQL语言中的 Select 语句。
使用聚合函数完成查询练习
SQL语句中关键词大小写不区分。考虑到本系统的测评规则,在题目中要求对列名小写的,请务必按要求书写,否则会评判为错误!
性别用’m’表示男,’f’表示女

实验完成要求
根据代码区的提示,将查询数据的SQL语句书写在对应的代码区中。
注:请务必将select子句中出现的列名小写,顺序必须和题目要求一致
1、查询Niki(姓名)同学的平均分,列出平均分(列名为:savg)
2、查询CS系每个同学的平均分,列出学号和平均分(列名为:savg)。
3、查询学分为2的每门课程的选课人数,列出课程号和选课人数(列名为:scnt)。

测试说明
书写查询语句后,直接测试。

sql语句
sql1:


USE CS_yx_DB
GO
SET NOCOUNT ON

-- ********** Begin ********** --
-- ********** 此处写“1、查询Niki(姓名)同学的平均分,列出平均分(列名为:savg)”的SQL语句 ********** --
select avg(grade) as savg from Sc
where Sno in (select sno from Student where Sname='Niki');


-- ********** End ********** --

GO

sql2:


USE CS_yx_DB
GO
SET NOCOUNT ON

-- ********** Begin ********** --
-- ********** 此处写“2、查询CS系每个同学的平均分,列出学号和平均分(列名为:savg)”的SQL语句 ********** --
select sno,avg(grade) as savg from Sc
where Sno in (select Sno from Student where Sdept='CS')
group by Sno;

-- ********** End ********** --

GO

sql3:


USE CS_yx_DB
GO
SET NOCOUNT ON

-- ********** Begin ********** --
-- ********** 此处写“3、查询学分为2的每门课程的选课人数,列出课程号和选课人数(列名为:scnt)”的SQL语句 ********** --
select cno,count(Sno) as scnt from Sc
where Cno in (select Cno from Course where Ccredit=2)
group by Cno;


-- ********** End ********** --

GO

第3关:查询统计三

任务描述
本关任务:使用聚合函数做查询练习

相关知识
使用SQL语言中的 Select 语句。
使用聚合函数完成查询练习
SQL语句中关键词大小写不区分。考虑到本系统的测评规则,在题目中要求对列名小写的,请务必按要求书写,否则会评判为错误!
性别用’m’表示男,’f’表示女

实验完成要求
根据代码区的提示,将查询数据的SQL语句书写在对应的代码区中。
注:请务必将select子句中出现的列名小写,顺序必须和题目要求一致
1、查询平均分最高的学生的姓名。
2、查询不及格人数大于等于2人的课程,列出课程号,课程名,不及格人数(列名为scnt)

测试说明
书写查询语句后,直接测试。

sql语句
sql1:


USE CS_yx_DB
GO
SET NOCOUNT ON

-- ********** Begin ********** --
-- ********** 此处写“1、查询平均分最高的学生的姓名”的SQL语句 ********** --
select sname from Student
where Sno in (select Sno from Sc  
              group by Sno 
              having avg(grade)>=all(select avg(grade) from Sc 
                                     group by Sno));


-- ********** End ********** --

GO

sql2:

USE CS_yx_DB
GO
SET NOCOUNT ON

-- ********** Begin ********** --
-- ********** 此处写“2、查询不及格人数大于等于2人的课程,列出课程号,课程名,不及格人数(列名为scnt)”的SQL语句 ********** --
select Course.cno,cname,Count(sno) as scnt from Sc,Course
where Course.Cno=Sc.Cno and Grade<60
group by Course.cno,Cname
having Count(sno)>=2;


-- ********** End ********** --

GO

第4关:查询统计四

任务描述
本关任务:使用聚合函数做查询练习

相关知识
使用SQL语言中的 Select 语句。
使用聚合函数完成查询练习
SQL语句中关键词大小写不区分。考虑到本系统的测评规则,在题目中要求对列名小写的,请务必按要求书写,否则会评判为错误!
性别用’m’表示男,’f’表示女

实验完成要求
根据代码区的提示,将查询数据的SQL语句书写在对应的代码区中。
注:请务必将select子句中出现的列名小写,顺序必须和题目要求一致
1、查询E系平均成绩最高的同学的姓名,列出姓名。

测试说明
书写查询语句后,直接测试。
sql语句

USE CS_yx_DB
GO
SET NOCOUNT ON

-- ********** Begin ********** --
-- ********** 此处写“1、查询E系平均成绩最高的同学的姓名,列出姓名”的SQL语句 ********** --
select sname from Sc,Student
where Sc.Sno=Student.Sno and Sdept ='E'
group by Sname
having avg(grade)>=all(select avg(grade) from Sc
                       where sno in (select sno from Student  where Sdept='E')
                       group by sno );


-- ********** End ********** --

GO

注:答案不唯一,仅供参考。

你可能感兴趣的:(sql)