数据库实验四作业及答案 下载本文

内容发布更新时间 : 2024/5/7 12:44:08星期一 下面是文章的全部内容请认真阅读。

(3) 查询所有男同学的选课情况,要求列出学号、姓名、课程名称、分数。

selectstudent_info.学号,姓名,课程编号,分数 fromstudent_info

leftouterjoingradeonstudent_info.学号=grade.学号 where性别='男'

(4) 查询每个学生的所选课程的最高成绩,要求列出学号、姓名、课程名称、分数。

selectgrade.学号,student_info.姓名,grade.课程编号,grade.分数 fromstudent_infoleftouterjoingradeonstudent_info.学号=grade.学号 wheregrade.分数>=(selectMAX(分数)fromgradeb whereb.学号=grade.学号)

(5) 查询所有学生的总成绩,要求列出学号、姓名、总成绩,没有选修课程的学

生的总成绩为空。

提示:使用左外连接。

selectgrade.学号,姓名,sum(分数)

fromstudent_infoleftouterjoingradeonstudent_info.学号=grade.学号 groupbygrade.学号,姓名

(6) 为grade表添加数据行:学号0004、课程编号为0006、成绩为76。查询所有课程的选修情况,要求列出课程编号、课程名称、选修人数,curriculum表中没有的课程列值为空。

提示:使用右外连接。

insertgradevalues('0004','0006','76')

selectgrade.课程编号,课程名称,count(*)fromgraderightouterjoincurriculum ongrade.课程编号=curriculum.课程编号 groupbygrade.课程编号,课程名称

6. 使用UNION运算符将student_info表中姓“张”的学生的学号、姓名与curriculum表的课程编号、课程名称返回在一个表中,且列名为u_编号、u_名称,如图1-8所示。

select 学号 u_编号,姓名 u_名称

from student_info where 姓名 like '张%' union select 课程编号,课程名称 from curriculum

图1-8 联合查询结果集

7. 数据更新

(1) 创建totalgrade表,具有数据列:学号、姓名、总成绩。 CREATE TABLE totalgrade

( 学号 char(4) NOT NULL,

姓名 varchar(8) NULL,

总成绩 decimal(5,2) NULL )

(2) 使用INSERT INTO语句通过student_info表更新totalgrade表的学号、姓

名列数据。 INSERT INTO totalgrade

SELECT 学号,姓名,总成绩=0 FROM student_info

(3) 使用UPDATE语句通过grade表更新totalgrade表的中成绩列数据,使

totalgrade表中每个学生的总分成绩为grade表中该学生各成绩之和。 UPDATE totalgrade SET 总成绩=

(SELECT SUM(分数) FROM grade WHERE totalgrade.学号=grade.学号) FROM grade

(4) 删除totalgrade表中没有总成绩的学生记录。 delete from totalgrade where 总成绩 is null

四、 实验思考

1. 查询所有没有选修课程的学生信息,返回结果包括学号、姓名、性别。 2. 在student_info表和grade表之间实现交叉连接。

3. 查询每个学生的所选课程的成绩,并列出学号生成分组汇总(总成绩)和明细行

(各课成绩)。

提示:使用SELECT语句的COMPUTE选项。