开篇

第一次把两者关联起来, 还是在背 sql 优化方面的面试题时。 有一条是这么说的: 当 sql 语句中出现 in 或 not in 时, 用 exists 或 not exists 代替。然而我在实际开发中,还是习惯使用 in 关键字,就在最近一次开发中,突然想试试 exist ,但是替换之后运行的结果出乎我的意料。


应用

先来看一条 sql

selec realname from student where id in (1, 2, 3); # 从学生表中查出来 id 为 1 或 2 或 3的学生姓名。

用 exits 代替 in

select realname from student where id exists in (1, 2, 3);

运行

控制台提示了一条错误信息 “exists 关键字附近出现了语法错误”


结论

懵圈了片刻之后, 便开始了我的探索之旅。 最终的结果如下:exits 的用法是 select 字段1,字段2 from TableA where exits (select 字段 from TableB where 条件) exits 后面的语句返回的是一个 Boolean 类型的数据。如果exits 返回 true, 那么就从 TableA 查出符合条件的数据。

先看两张表

`表A
ID  NAME
1   A1
2   A2
3   A3表B
ID AID NAME
1   1     B1
2   2     B2
3   2     B3
`

表A和表B是1对多的关系 A.ID => B.AID

exits 的使用

SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE A.ID=B.AID)

执行结果为

`1 A12 A2`

原因可以按照如下分析

  1. SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=1)

    --->SELECT * FROM B WHERE B.AID=1有值返回真所以有数据

  2. SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=2)

    --->SELECT * FROM B WHERE B.AID=2有值返回真所以有数据

  3. SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=3)

    --->SELECT * FROM B WHERE B.AID=3无值返回真所以没有数据

转载于:https://my.oschina.net/u/3984985/blog/3020334

sql 语句 中的 exits 和 in 关键字相关推荐

  1. MySQL中修改表结构的关键字_下列SQL语句中,修改表结构的关键字是

    [单选题]对<将进酒>全诗分析不正确的是 [单选题]下列划线词语的解释有误的一项是 [多选题]下列食品属于不完全蛋白质的是 ( ) . [单选题]下列聚合函数中属性列必须是数值型的是 [单 ...

  2. 关于Sql语句中的模糊查询like关键字详解

    Sql中模糊查询like关键字的语法是: select * from 表名 where 字段 like 条件 关于条件,一共有四种匹配方式: 第一:%的使用 %用来匹配0个或者多个字符,可以匹配任意类 ...

  3. SQL 语句中的字段名 如果是 关键字怎么办?

    再SQL 语句中 如果有的字段 是关键字 那么[关键字]可以防止 转载于:https://www.cnblogs.com/sexybomber/archive/2008/07/01/1233492.h ...

  4. Sql 语句中 IN 和 EXISTS

    原文链接:  (2条消息)Sql 语句中 IN 和 EXISTS 的区别及应用 - jcpp9527的博客 - CSDN博客 https://blog.csdn.net/wqc19920906/art ...

  5. oracle 哦【的【,清晰讲解SQL语句中的外连接,通用于Mysql和Oracle,全是干货哦

    清晰讲解SQL语句中的外连接,通用于Mysql和Oracle,全是干货哦 直入主题: 我们做一个操作,将员工SCOTT的部门去掉,再次通过内连接查看数据,看看会产生什么现象? 使用内连接,查询数据 问 ...

  6. MySQL删除s表命令_SQLServer数据库sql语句中----删除表数据drop、truncate和delete的用法...

    本文主要向大家介绍了SQLServer数据库sql语句中----删除表数据drop.truncate和delete的用法,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助. 虽 ...

  7. SQL语句中的select高级用法

    #转载请联系 为了更好的了解下面的知识点,我们先创建两张表并插入数据. # 学生表 +----+-----------+------+--------+--------+--------+------ ...

  8. IsNull 和 SQL语句中CASE WHEN用法

    [转]IsNull 和 SQL语句中CASE WHEN用法收藏   [转]IsNull 和 SQL语句中CASE WHEN用法 1.ISNULL     使用指定的替换值替换   NULL.      ...

  9. mysql与orancl_清晰讲解SQL语句中的外连接,通用于Mysql和Oracle,全是干货哦

    清晰讲解SQL语句中的外连接,通用于Mysql和Oracle,全是干货哦 直入主题: 我们做一个操作,将员工SCOTT的部门去掉,再次通过内连接查看数据,看看会产生什么现象? 使用内连接,查询数据 问 ...

最新文章

  1. Oracle 优化器
  2. microsoft word中在公式后插入可交叉引用的公式编号
  3. C#字符格式化占位符
  4. 转载:比Python快100倍,利用spaCy和Cython实现高速NLP项目
  5. 服务器mysql显示链接次数太多,服务器mysql显示链接次数太多
  6. 深入学习jQuery选择器系列第六篇——过滤选择器之状态选择器
  7. 【转】WebSocket API总结
  8. Zxing二维码重复扫描,不退出。
  9. svg 地图_找地图素材?有这个网站就够了!
  10. springboot忽略证书_SpringBoot中通过java代码实现忽略SSL证书
  11. 50岁开始学python_再过两年C语言就50岁了,这么老的编程语言怎么还没有过时?...
  12. fullPage最后一屏自适应
  13. bbs小项目整理(五)(登录模块的完成)
  14. Cocos2d-X3.0 刨根问底(九)----- 场景切换(TransitionScene)源代码分析
  15. php+mysql数据库语法错误_求教:PHP+MYSQL制作用户登录系统问题,总是提示数据库查询语句语法不对。$sql=mysql_query(。。。)这行...
  16. Java编写五线谱上的音符_五线谱入门(三)——音符详解
  17. ug草图精度怎么设置_UG怎么设置草图尺寸? UG草图尺寸的编辑方法
  18. 一起学爬虫(Python) — 05
  19. 夜曲歌词 拼音_夜曲歌词完整版 lrc 周杰伦 - Yo歌词网
  20. 计算机基础与程序设计自考怎么过

热门文章

  1. MATLAB蒙特卡洛(Monte Carlo)方法求椭圆面积
  2. 怎么把amr格式转换为mp3格式?
  3. Eigen, NumCpp, NumPy, CuPy计算时间成本对比
  4. Excel:数据透视表
  5. 图论 —— Kruskal 算法求最小生成树
  6. 山水印|竹林野茶:是药三分毒,多喝茶少买药
  7. Nginx和Ribbon相比有哪些不同?
  8. Host Interface
  9. python中return用法
  10. 航天院做程序员,是一种什么体验?