exist的使用分析__mysql学习笔记

首先,我们要明白,就像

if(t==7)  

cout<<"yes“;

一样,if后面的()里的句子,只表面是真是假,对输出什么东西没有任何影响

我们用select * / column1 

from table1

where exists(  select column2 from table2

                      where column3____)

的时候,那个()对于显示出来的字段数量没有任何影响!


然后,对于table1的每一条数据,都会挨个儿进行()里的判断,如果table2里有符合条件的数据,则真,没有则假;

所以其实column2 写什么都是无所谓的;

exists唯一做的就是根据真假来决定输不输出table1的数据;

这个说完了,我们再具体看看它到底干了些什么


exists对外表用loop逐条查询,每拿一条都会查看exists的条件语句,当 exists里的条件语句能够返回记录行时(无论记录行是的多少,只要能返回),条件就为真,返回当前loop到的这条记录,反之如果exists里的条 件语句不能返回记录行,则当前loop到的这条记录被丢弃;

not exists和exists整相反;

总的来说,如果A表有n条记录,那么exists查询就是将这n条记录逐条取出,然后判断n遍exists条件 

 


in查询相当于多个or条件的叠加,符合一个就可以;

这么用

select * from user where user_id  in (1,2,3);

user_id =1/2/3都可以;

1,2,3是用来举例子的,不代表任何字段;

not in 的话要求不等于1且不等于2且不等于3才可以;

in是先把子查询条件的记录全都查出来,就说有3个吧(1,2,3)。

然后把外表的user_id 一个个拉出来,

先让第一条id和1比,再和2比,再和3比,

然后拉出第二个;

还有,in查询的子条件返回结果只能有一个字段;




原文后面讲的exists和in的效率问题我真的没看懂呀

先记住下面这两条

子表小in ;

子表大exists;

无论大小,not exists;




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值