mysql使用exists进行查询

原创 2017年10月13日 15:58:32

参考:http://blog.csdn.net/gucapg/article/details/16839587


 

1、exists的返回结果是bool型,只有true或者false

如 SELECT * FROM alumni_info t WHERE EXISTS(SELECT a_id FROM alumni_education e WHERE e.a_id='6588' ),返回的结果跟SELECT * FROM alumni_info t一样(a_id=6588存在),因为select语句先执行where条件后的语句,再筛选字段,当执行完where条件后,若这条结果集存在,则where表达式后面永远都是true,否则为false。也就是说要么查询所有,要么没有数据。那么我只想查校友id,为6588的校友,使用exists该怎么写,经过一番测试,内查询中的id,必须为外查询的id,即SELECT * FROM alumni_info t WHERE EXISTS(SELECT a_id FROM alumni_education e WHERE t.id_='6588' ),ok,完事.

 

2、如果我想查询所有教育经历的校友,使用exists实现,当然用in实现也一样,不过效率低点
SELECT * FROM alumni_info t WHERE EXISTS(SELECT a_id FROM alumni_education e WHERE e.a_id=t.ID_ )

 

3、exists的效率比in查询要高,因为IN不走索引,但要看实际情况具体使用,IN适合于外表数据量大而内表数据小的情况;EXISTS适合于外表小而内表大的情况

 

4、exists与not exists是相对应的。


补充:select * from userwechatcard uw where EXISTS (select id from wechatcarden w where uw.cardId = 'pbLatjk4T4Hx-QFQGL4zGQy27_Qg')

比如卡券项目中我想查询卡券发行数量超过100张的卡券信息

那么sql:

select * from wechatcarden wc where exists (select * from wechatcardsummary w where wc.id = w.weChatCardEnId and  skuQuantity>= 1000 )

等价于:select * from wechatcarden uw left join wechatcardsummary  ws on uw.id = ws.weChatCardEnId where ws.skuQuantity >= 1000



必须要含有外部id或者其他外部元素可以达到where条件查询的效果,不然就是查询所有,等价于select * from wechatcarden wc



 

版权声明:本文为博主原创文章,未经博主允许不得转载。

Mysql中EXISTS关键字用法、总结

在做教务系统的时候,一个学生(alumni_info)有多个教育经历(alumni_education),使用的数据库是mysql,之前使用左链接查询的,发现数据量才只有几万条时,查询就很慢了,早上想...
  • gucapg
  • gucapg
  • 2013年11月20日 10:44
  • 6515

Mysql Exists 和Not Exists用法

这里着重介绍Not Exists(Exists用法类似),Not Exists 不存在 用法:Select  * from TableA  a  where Not Exists (Select *...
  • suo082407128
  • suo082407128
  • 2015年10月20日 16:16
  • 5039

MySQL exists的用法介绍

有一个查询如下: 1 SELECT c.CustomerId, CompanyName   2 FROM Custo...
  • wocaonima123987
  • wocaonima123987
  • 2012年09月21日 15:23
  • 6299

MYSQL IN 与 EXISTS 的优化示例介绍,mysql exists

MYSQL IN 与 EXISTS 的优化示例介绍,mysqlexists 优化原则:小表驱动大表,即小的数据集驱动大的数据集。 ############# 原理 (RBO) ####...
  • xj626852095
  • xj626852095
  • 2016年06月13日 10:35
  • 2521

mysql exists用法

select * from tests where exists (select * from papertest where paperid=1 and tests.tid=papertest.te...
  • wmsjlihuan
  • wmsjlihuan
  • 2013年11月15日 16:30
  • 3049

浅析MySQL中exists与in的使用 (写的非常好)

exists对外表用loop逐条查询,每次查询都会查看exists的条件语句,当 exists里的条件语句能够返回记录行时(无论记录行是的多少,只要能返回),条件就为真,返回当前loop到的这条记录,...
  • ye411685846
  • ye411685846
  • 2017年03月10日 13:53
  • 1565

Mysql数据库中的EXISTS和NOT EXISTS

准备数据 我们先介绍下使用的3个数据表: student数据表: course数据表: sc数据表: EXISTS EXISTS代表存在量词∃。带有EXISTS...
  • QianShouYuZhiBo
  • QianShouYuZhiBo
  • 2013年10月09日 21:23
  • 28418

基于mysql 的exists 嵌套查询的详解

select Sname from Student where not exists (select * from Course where not exists ...
  • ljgstudy
  • ljgstudy
  • 2013年01月13日 19:25
  • 1432

Sql语句优化-查询两表不同行NOT IN、NOT EXISTS、连接查询Left Join

在实际开发中,我们往往需要比较两个或多个表数据的差别,比较那些数据相同那些数据不相同,这时我们有一下三种方法可以使用:1. IN或NOT IN,2. EXIST或NOTEXIST,3.使用连接查询(i...
  • fengshizty
  • fengshizty
  • 2015年01月21日 16:23
  • 5678

Mysql实现数据的不重复写入(insert if not exists)以及新问题:ID自增不连续的解答

最近做数据处理时候,遇到一个问题。用一个id自增主键时候,数据表中会插入大量重复数据(除ID不同)。这虽然对最终数据处理结果没有影响,但是有1个问题,如果数据量超大,对处理的速度影响成几何倍数增长!所...
  • liyong199012
  • liyong199012
  • 2014年03月19日 10:37
  • 25530
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mysql使用exists进行查询
举报原因:
原因补充:

(最多只允许输入30个字)