2016-11-22 167 views
0

如何將連接查詢轉換爲嵌套查詢(使用「where in」條件)? 例如如何將其轉換爲嵌套查詢?將查詢轉換爲嵌套查詢

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; 
+2

我認爲一個雙連接可能需要一個雙重嵌套的'WHERE'子句(閱讀:真的很難看)。爲什麼你需要這樣做,除非你使用類似JPA的東西,因爲某些原因需要這種格式? –

+0

@TimBiegeleisen,有可能有涉及3個表的嵌套查詢?它的語法是什麼? – Siraj

+0

@TimBiegeleisen您能否詳細說明您提到的雙重嵌套 – Siraj

回答

0

這將被評估爲NLJ(「嵌套循環連接」)。

  1. 查看student,在usn = '...'上過濾。
  2. 對於每個這樣的行(可能是這種情況下的一行),請執行NLJ到attendance以查找滿足ON的任何和所有行。這導致更長(或更短)的行列表。
  3. 對於#2中的每一行,根據ON根據schedule執行NLJ。現在有一組行...
  4. GROUP BYORDER BY(這些可以同時完成,因爲它們是相同的)。這將不會比#3提供更多的行。 (GROUP BY不能增加行數。)

重新接線查詢到WHERE x IN (SELECT ...),通常使其運行速度較慢。