面试题答案
一键面试- SQL语句:
SELECT s.name
FROM students s
JOIN scores sc ON s.student_id = sc.student_id
JOIN courses c ON sc.course_id = c.course_id
WHERE c.course_name = '数学' AND sc.score > 80;
- 思路:
- 首先通过
JOIN
操作将三张表连接起来。连接条件为students
表的student_id
与scores
表的student_id
相等,scores
表的course_id
与courses
表的course_id
相等。这样可以将三张表中相关的数据关联起来。 - 然后在
WHERE
子句中添加筛选条件,即课程名称为‘数学’且成绩大于80分。通过这种方式,最终得到选修了‘数学’课程且成绩大于80分的学生姓名。
- 首先通过
- 等值传递优化策略的作用:
- 在数据库查询优化中,等值传递优化策略是指在连接条件中,如果存在多个等值条件,数据库可以利用这些等值关系,提前进行数据过滤和关联操作,减少中间结果集的大小。
- 在此查询中,通过连接条件
s.student_id = sc.student_id
和sc.course_id = c.course_id
形成了等值传递关系。数据库在执行查询时,可以利用这些等值条件,提前对数据进行过滤和关联,避免生成大量不必要的中间结果。例如,数据库可以先根据course_name = '数学'
在courses
表中筛选出数学课程的course_id
,然后利用sc.course_id = c.course_id
的等值关系,在scores
表中快速定位到选修数学课程的成绩记录,再通过s.student_id = sc.student_id
的等值关系,在students
表中获取对应的学生姓名。这样减少了全表扫描的次数,提高了查询效率。