子查询分为:
- 列中子查询 单列单行
- 表子查询 必须有别名
- 条件子查询 单行单列 多行单列
下列示例表结构:
grade表:
result表:
student表:
subject表:
列中子查询 单列单行
列中子查询即
外层查询的结果为其他表的一列数据
示例:
例如查出结果后想要将课程编号换成课程名,就可以使用列中子查询
select a.StudentNo,a.SubjectNo,a.StudentResult,(select b.SubjectName from `subject` b where b.SubjectNo=a.SubjectNo) as 课程名称from result a;
表子查询 必须有别名
将一张表的查询结果当成一张现有的表,再次与另外一张表进行连接查询
示例:
select tab.*,d.GradeName from (select SubjectName,a.StudentNo,c.GradeId,StudentName,StudentResult from result a LEFT JOIN `subject` b on a.SubjectNo = b.SubjectNo LEFT JOIN student c on a.StudentNo = c.StudentNo) tab LEFT JOIN grade d on tab.GradeId = d.GradeID;
条件子查询 单行单列 多行单列
条件子查询用的较多,即将一次查询的查询结果当做另一张表的查询条件,一般这个查询条件要和查询结果字段对应
一般用 = 或者 in来连接
示例:
#查询课程为《高等数学-2 高等数学-1》且分数不小于80分的学生的学号和姓名select * from result a where a.StudentResult>80and a.SubjectNo in (select SubjectNo from `subject` b where b.SubjectName = "高等数学-2" or b.SubjectName = "高等数学-1");
来源地址:https://blog.csdn.net/qq_57480977/article/details/126658379