sql中使用最多的就是查询,子查询相对比较难
子查询分为三种:
1.如果子查询返回的是一个列一个值,那么通常使用在作为条件的情况下,例如
select studentname from student where subjectno=(
select subjectno from subject where subjectname='java'
);
这个代码是查找课程名字为java的所有学生的名字,查看代码的时候,先从第一个from往后看,翻译过来就是,从学生表查找课程编号等于(从课程表查找课程名字为java的课程编号) 的学生名字.这是看代码的顺序.
2.如果子查询返回的是一个列多个值,那么通常使用的是模糊查询的条件,一般使用in,或者not in
select studentname from student where subjectno in (
select subjectno from subject where subjectname='java' or subjectname='c#'
);
3.如果子查询的结果是一个多行多列(或单列)的情况,那么子查询的结果我们就可以看作一个虚拟表,字段名字是查询出来的字段名称.这个查询用的多,就不举例子了,查出来的表相当于自己创建了一个新表,只是这个表不会被储存.(当前语句可用)
4.(特殊)子查询还有一个比较特殊的是相关子查询,主要用于,当前子查询需要跟父级进行比较的时候使用.
select studentname from student
where not exists(
select * from result where result.studentno=student.studentno
);
查询的时候我们可以看作循环
解释:从学生表中判断,如果在成绩表中不存在成绩表中的学生编号等于学生表中的学生编号,那么就查找出学生的姓名.
思考的时候,我们可以用单个例子来举例,比如一开始我们选择的学生是张三,那么我们会遍历结果表中的学生编号,看张三的有没有在里面,有的话就移除这条数据,没有的话就保留这条数据
所以我们查找道的是没考过试的学生的名字.