1. /*============== 子查询 ================
    2. 什么是子查询?
    3. 在查询语句中的WHERE条件子句中,又嵌套了另一个查询语句
    4. 嵌套查询可由多个子查询组成,求解的方式是由里及外;
    5. 子查询返回的结果一般都是集合,故而建议使用IN关键字;
    6. */
    7. -- 查询 数据库结构-1 的所有考试结果(学号,科目编号,成绩),并且成绩降序排列
    8. -- 方法一:使用连接查询
    9. SELECT studentno,r.subjectno,StudentResult
    10. FROM result r
    11. INNER JOIN `subject` sub
    12. ON r.`SubjectNo`=sub.`SubjectNo`
    13. WHERE subjectname = '数据库结构-1'
    14. ORDER BY studentresult DESC;
    15. -- 方法二:使用子查询(执行顺序:由里及外)
    16. SELECT studentno,subjectno,StudentResult
    17. FROM result
    18. WHERE subjectno=(
    19. SELECT subjectno FROM `subject`
    20. WHERE subjectname = '数据库结构-1'
    21. )
    22. ORDER BY studentresult DESC;
    23. -- 查询课程为 高等数学-2 且分数不小于80分的学生的学号和姓名
    24. -- 方法一:使用连接查询
    25. SELECT s.studentno,studentname
    26. FROM student s
    27. INNER JOIN result r
    28. ON s.`StudentNo` = r.`StudentNo`
    29. INNER JOIN `subject` sub
    30. ON sub.`SubjectNo` = r.`SubjectNo`
    31. WHERE subjectname = '高等数学-2' AND StudentResult>=80
    32. -- 方法二:使用连接查询+子查询
    33. -- 分数不小于80分的学生的学号和姓名
    34. SELECT r.studentno,studentname FROM student s
    35. INNER JOIN result r ON s.`StudentNo`=r.`StudentNo`
    36. WHERE StudentResult>=80
    37. -- 在上面SQL基础上,添加需求:课程为 高等数学-2
    38. SELECT r.studentno,studentname FROM student s
    39. INNER JOIN result r ON s.`StudentNo`=r.`StudentNo`
    40. WHERE StudentResult>=80 AND subjectno=(
    41. SELECT subjectno FROM `subject`
    42. WHERE subjectname = '高等数学-2'
    43. )
    44. -- 方法三:使用子查询
    45. -- 分步写简单sql语句,然后将其嵌套起来
    46. SELECT studentno,studentname FROM student WHERE studentno IN(
    47. SELECT studentno FROM result WHERE StudentResult>=80 AND subjectno=(
    48. SELECT subjectno FROM `subject` WHERE subjectname = '高等数学-2'
    49. )
    50. )