子查询,简称套娃查询

/*============== 子查询 ================ 
什么是子查询?    
在查询语句中的WHERE条件子句中,又嵌套了另一个查询语句   
 嵌套查询可由多个子查询组成,求解的方式是由里及外;    
 子查询返回的结果一般都是集合,故而建议使用IN关键字; */
-- 查询 数据库结构-1 的所有考试结果(学号,科目编号,成绩),并且成绩降序排列

-- 方法一:使用连接查询 

SELECT studentno,r.subjectno,StudentResult
FROM result r 
INNER JOIN `subject` sub
ON r.`SubjectNo`=sub.`SubjectNo` 
WHERE subjectname = '数据库结构-1' 
ORDER BY studentresult DESC;


-- 方法二:使用子查询(执行顺序:由里及外) 
SELECT studentno,subjectno,StudentResult 
FROM result WHERE 
subjectno=(    
	SELECT subjectno FROM `subject`    
	WHERE subjectname = '数据库结构-1' ) 
ORDER BY studentresult DESC;

-- 查询课程为 高等数学-2 且分数不小于80分的学生的学号和姓名 
-- 方法一:使用连接查询 
SELECT s.studentno,studentname 
FROM student s 
INNER JOIN result r 
ON s.`StudentNo` = r.`StudentNo` 
INNER JOIN `subject` sub 
ON sub.`SubjectNo` = r.`SubjectNo` 
WHERE subjectname = '高等数学-2' AND StudentResult>=80


-- 方法二:使用连接查询+子查询 
-- 分数不小于80分的学生的学号和姓名 
SELECT r.studentno,studentname 
FROM student s 
INNER JOIN result r 
ON s.`StudentNo`=r.`StudentNo`
WHERE StudentResult>=80

-- 在上面SQL基础上,添加需求:课程为 高等数学-2 
SELECT r.studentno,studentname FROM student s 
INNER JOIN result r ON s.`StudentNo`=r.`StudentNo` WHERE StudentResult>=80 AND subjectno=(   
	 SELECT subjectno FROM `subject`    
	 WHERE subjectname = '高等数学-2'
)


-- 方法三:使用子查询 
-- 分步写简单sql语句,然后将其嵌套起来 
SELECT studentno,studentname FROM student WHERE studentno IN(    
	SELECT studentno FROM result WHERE StudentResult>=80 AND subjectno=(        
	SELECT subjectno FROM `subject` WHERE subjectname = '高等数学-2'    ) )

你可能感兴趣的:(子查询,简称套娃查询)