如何将连接查询转换为嵌套查询(使用"其中"条件)? 例如,如何将其转换为嵌套查询?
SELECT student.studentname,
schedule.subcode,
AVG(attendance.ispresent)*100 AS Attendance_Status
FROM student
JOIN attendance
ON student.usn = attendance.usn
JOIN schedule
ON schedule.sched_id = attendance.sched_id
WHERE student.usn="4jc14is008"
GROUP BY schedule.subcode
ORDER BY schedule.subcode;
答案 0 :(得分:0)
这将被评估为NLJ("嵌套循环加入")。
usn = '...'
,过滤attendance
。ON
以找到满足给定schedule
的任何和所有行。这会导致更长(或更短)的行列表。ON
将NLJ转换为GROUP BY
。现在有一组行...... ORDER BY
和GROUP BY
(这些可以同时完成,因为它们完全相同)。这将不会提供比#3更多的行。 (WHERE x IN ( SELECT ... )
永远不会增加行数。)不将查询重新连接到{{1}},这通常会使其运行速度变慢。