(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选项。