您的位置:首页 > 数据库 > MySQL

exist的使用分析__mysql学习笔记

2017-09-16 18:00 204 查看
首先,我们要明白,就像

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: