在做教务系统的时候,一个学生(alumni_info)有多个教育经历(alumni_education),使用的数据库是mysql,之前使用左链接查询的,发现数据量才只有几万条时,查询就很慢了,早上想到用子查询in,感觉效率还不是很高,结果想到用exists,效率高了很多。由于是第一次在mysql中使用exists,百度了一番,现将自己的总结如下:

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是想对应的。

MySQL中有exists关键字吗_Mysql中EXISTS关键字用法、总结相关推荐

  1. mysql里all什么意思_mysql中all的用法是什么

    mysql中all的用法:1.all是"对于子查询返回的列中的所有值,如果比较结果为true,则返回true":2.all可以与[=.>.>=.]结合是来使用,分别表示 ...

  2. mysql教程or怎么用_MySQL中or语句用法示例

    1.mysql中or语法的使用,在mysql语法中or使用注意点. 项目遇到坑,遍历发放奖励数据查询错误!!! $sql = 'SELECT * FROM `vvt_spread_doubleegg_ ...

  3. mysql limit 表的长度_mysql中的limit用法有哪些(推荐)

    ?12SELECT *FROM 表名 limit m,n;SELECT *FROM table LIMIT [offset,]rows; 1.m代表从m+1条记录行开始检索,n代表取出n条数据.(m可 ...

  4. mysql if exists用法_MySQL中EXISTS的用法

    比如在Northwind数据库中有一个查询为 SELECT c.CustomerId,CompanyName FROM Customers cWHERE EXISTS(SELECT OrderID F ...

  5. mysql escape关键字_MySQL中ESCAPE关键字的用法详解

    MySQL转义 转义即表示转义字符原来的语义,一个转义字符的目的是开始一个字符序列,使得转义字符开头的该字符序列具有不同于该字符序列单独出现时的语义. MySQL中,转义字符以"\" ...

  6. mysql的explain怎么看_mysql中explain用法详解

    如果在select语句前放上关键词explain,mysql将解释它如何处理select,提供有关表如何联接和联接的次序. explain的每个输出行提供一个表的相关信息,并且每个行包括下面的列: 1 ...

  7. mysql创建临时表 主键_MySQL中临时表的基本创建与使用教程

    当工作在非常大的表上时,你可能偶尔需要运行很多查询获得一个大量数据的小的子集,不是对整个表运行这些查询,而是让MySQL每次找出所需的少数记录,将记录选择到一个临时表可能更快些,然后在这些表运行查询. ...

  8. mysql b tree索引原理_MySQL中B+Tree索引原理

    B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引.B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的.在讲B ...

  9. mysql的collate什么意思_MYSQL中的COLLATE是什么?

    在mysql中执行show create table 指令,可以看到一张表的建表语句,example如下: CREATE TABLE `table1` ( `id` bigint(20) unsign ...

最新文章

  1. 【二级java】软件工程基础
  2. 人工智能和自然智能能否交汇?李飞飞对话斯坦福神经生物学教授Bill Newsome
  3. 《DNS与BIND(第5版)》——7.6 保持一切平稳运行
  4. oracle树结构查询----connect by语法详解
  5. 群体测试中的假阴性影响
  6. react学习(12)-moment插件设置日期格式
  7. Redis分布式锁解决抢购问题
  8. SAP License:SD与COPA集成
  9. Can't use Subversion command line client:svn
  10. WebView的爬坑之路
  11. 离线强化学习(Offline RL)系列2: (环境篇)D4RL数据集简介、安装及错误解决
  12. 【金融量化】我以为我是食物链顶层的收割者,想不到只是别人手中的镰刀
  13. 安装VS2010旗舰版时出现.Net framework4.0,安装失败
  14. el-table 表尾行合并,列合并,统计
  15. 【计算机网络】根据IP地址计算网络地址
  16. iOS开发-ios7样式绕圈活动指示器(自定义Activity Indicator View)
  17. pycharm pep8 代码格式化
  18. Ho-Kashyap Algorithm 原理笔记
  19. 白天看投影仪哪个牌子最好?家用投影仪推荐一下哪款比较好
  20. python控制树莓派马达_树莓派控制步进电机

热门文章

  1. GCN pytorch实现 笔记
  2. 计算机图形学E6——倒水问题emm和OpenGL没啥关系
  3. cmd模式下如何从c盘转换到其他盘
  4. sql 拼接int类型的字段_这才是SQL优化的正确姿势!
  5. RDD Join 性能调优
  6. Visual Studio注释快捷键
  7. spark-OutOfMemory:GC overhead limit exceeded 解决,timelimitexceeded
  8. 看ct片子的软件_X光、CT、核磁、B超的辐射到底对孩子有多大影响?
  9. 集成运算放大电路实验报告_模电总结:第三章、集成运算放大电路
  10. 计算机网络的拓扑结构三种基本型,2018年自考《计算机网络基本原理》试题库四...