not existes 、existes、 in 与not in

existes与in是可以互相转换的。只是逻辑有点差别,并且在性能上有差别。


in就是存在。我们原来曾用过。select * from student  where  no in (001,002,003) 就是选出no等于001或者 002 或者003的学生。

那么就是说,如果where 后面为true ,那么前面就显示结果。

select * from student no in (select  stuNo  from class where class.stuNo = student.no)

这里,如果student表的no等于 后面选出的stuNo,那么就选出这条学生记录。

注意:in 语句 是先查询where后面的子查询的,将子查询的结果查出来之后,然后再去主查询筛选。而existes是正好相反的。


existes 你会发现没有 在where 后面加表的字段 existes 所以,只是根据后面的整个子查询返回true或者false来限制的是否显示结果集。

select * from student existes (select * from class where class.stuNo = student.no)

而existes 先执行主查询,之后再到子查询去筛选。


与in一样,后面选的为空 则返回为False 否则 有数据 贼为true


在查询的时候,先执行数据量小的。也就是如果class的数据少,那么刚才就需要用in是好一点的。这样in选出数据后,再去主查询比对。就不需要把数据量很大的student这个表的数据查询出来。  效率性能会高很多。


反之不存在就加not


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值