sql子查询

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
);

查询的时候我们可以看作循环
解释:从学生表中判断,如果在成绩表中不存在成绩表中的学生编号等于学生表中的学生编号,那么就查找出学生的姓名.
思考的时候,我们可以用单个例子来举例,比如一开始我们选择的学生是张三,那么我们会遍历结果表中的学生编号,看张三的有没有在里面,有的话就移除这条数据,没有的话就保留这条数据
所以我们查找道的是没考过试的学生的名字.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值