题目
有表一的查询结果如下,该表为学生成绩表select id,grade from student_gradeID GRADE-------- -----------1 502 403 704 805 306 90表二为补考成绩表select id,grade from student_makeupID GRADE-------- -----------1 602 805 60现在通过如下语句把补考成绩更新到成绩表中,并提交:update student_grade s set s.grade =(select t.grade from student_makeup twhere s.id=t.iD、;commit;请问之后查询:select GRADE from student_grade where id = 3; 结果为:()A、 B、 70C、 nullD、 以上都不对
有表一的查询结果如下,该表为学生成绩表
select id,grade from student_grade
ID GRADE
-------- -----------
1 50
2 40
3 70
4 80
5 30
6 90
表二为补考成绩表
select id,grade from student_makeup
ID GRADE
-------- -----------
1 60
2 80
5 60
现在通过如下语句把补考成绩更新到成绩表中,并提交:
update student_grade s set s.grade =
(select t.grade from student_makeup t
where s.id=t.iD、;
commit;
请问之后查询:
select GRADE from student_grade where id = 3; 结果为:()
- A、
- B、 70
- C、 null
- D、 以上都不对
题目解答
答案
C
解析
考查要点:本题主要考查SQL中的更新语句与子查询的结合使用,以及外键关联和空值(null)的处理逻辑。
解题核心思路:
- 理解更新逻辑:
UPDATE语句通过子查询从student_makeup表中获取对应id的grade值,并更新到student_grade表中。 - 关键点:当子查询没有找到匹配的记录时,返回
null,导致原表中对应字段被设置为null。 - 特殊值处理:原表中
id=3的记录在补考表中不存在,因此更新后其grade会被设为null。
步骤解析
-
更新逻辑分析
UPDATE语句遍历student_grade表中的每条记录,尝试用student_makeup表中的grade值进行更新。- 存在匹配:若
student_makeup表中有对应id,则更新grade为补考成绩。 - 无匹配:若无对应
id,子查询返回null,导致原表中grade被设为null。
- 存在匹配:若
-
具体数据验证
id=3的情况:在student_makeup表中无id=3的记录,因此子查询返回null,原表中id=3的grade从70变为null。- 其他
id的情况:如id=1、id=2、id=5会被更新为补考成绩,id=4、id=6因无补考记录也被设为null。
-
最终查询结果
执行SELECT grade FROM student_grade WHERE id=3时,返回null。