sql 语句 中的 exits 和 in 关键字
开篇
第一次把两者关联起来, 还是在背 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`
原因可以按照如下分析
SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=1)
--->SELECT * FROM B WHERE B.AID=1有值返回真所以有数据
SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=2)
--->SELECT * FROM B WHERE B.AID=2有值返回真所以有数据
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 关键字相关推荐
- MySQL中修改表结构的关键字_下列SQL语句中,修改表结构的关键字是
[单选题]对<将进酒>全诗分析不正确的是 [单选题]下列划线词语的解释有误的一项是 [多选题]下列食品属于不完全蛋白质的是 ( ) . [单选题]下列聚合函数中属性列必须是数值型的是 [单 ...
- 关于Sql语句中的模糊查询like关键字详解
Sql中模糊查询like关键字的语法是: select * from 表名 where 字段 like 条件 关于条件,一共有四种匹配方式: 第一:%的使用 %用来匹配0个或者多个字符,可以匹配任意类 ...
- SQL 语句中的字段名 如果是 关键字怎么办?
再SQL 语句中 如果有的字段 是关键字 那么[关键字]可以防止 转载于:https://www.cnblogs.com/sexybomber/archive/2008/07/01/1233492.h ...
- Sql 语句中 IN 和 EXISTS
原文链接: (2条消息)Sql 语句中 IN 和 EXISTS 的区别及应用 - jcpp9527的博客 - CSDN博客 https://blog.csdn.net/wqc19920906/art ...
- oracle 哦【的【,清晰讲解SQL语句中的外连接,通用于Mysql和Oracle,全是干货哦
清晰讲解SQL语句中的外连接,通用于Mysql和Oracle,全是干货哦 直入主题: 我们做一个操作,将员工SCOTT的部门去掉,再次通过内连接查看数据,看看会产生什么现象? 使用内连接,查询数据 问 ...
- MySQL删除s表命令_SQLServer数据库sql语句中----删除表数据drop、truncate和delete的用法...
本文主要向大家介绍了SQLServer数据库sql语句中----删除表数据drop.truncate和delete的用法,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助. 虽 ...
- SQL语句中的select高级用法
#转载请联系 为了更好的了解下面的知识点,我们先创建两张表并插入数据. # 学生表 +----+-----------+------+--------+--------+--------+------ ...
- IsNull 和 SQL语句中CASE WHEN用法
[转]IsNull 和 SQL语句中CASE WHEN用法收藏 [转]IsNull 和 SQL语句中CASE WHEN用法 1.ISNULL 使用指定的替换值替换 NULL. ...
- mysql与orancl_清晰讲解SQL语句中的外连接,通用于Mysql和Oracle,全是干货哦
清晰讲解SQL语句中的外连接,通用于Mysql和Oracle,全是干货哦 直入主题: 我们做一个操作,将员工SCOTT的部门去掉,再次通过内连接查看数据,看看会产生什么现象? 使用内连接,查询数据 问 ...
最新文章
- Oracle 优化器
- microsoft word中在公式后插入可交叉引用的公式编号
- C#字符格式化占位符
- 转载:比Python快100倍,利用spaCy和Cython实现高速NLP项目
- 服务器mysql显示链接次数太多,服务器mysql显示链接次数太多
- 深入学习jQuery选择器系列第六篇——过滤选择器之状态选择器
- 【转】WebSocket API总结
- Zxing二维码重复扫描,不退出。
- svg 地图_找地图素材?有这个网站就够了!
- springboot忽略证书_SpringBoot中通过java代码实现忽略SSL证书
- 50岁开始学python_再过两年C语言就50岁了,这么老的编程语言怎么还没有过时?...
- fullPage最后一屏自适应
- bbs小项目整理(五)(登录模块的完成)
- Cocos2d-X3.0 刨根问底(九)----- 场景切换(TransitionScene)源代码分析
- php+mysql数据库语法错误_求教:PHP+MYSQL制作用户登录系统问题,总是提示数据库查询语句语法不对。$sql=mysql_query(。。。)这行...
- Java编写五线谱上的音符_五线谱入门(三)——音符详解
- ug草图精度怎么设置_UG怎么设置草图尺寸? UG草图尺寸的编辑方法
- 一起学爬虫(Python) — 05
- 夜曲歌词 拼音_夜曲歌词完整版 lrc 周杰伦 - Yo歌词网
- 计算机基础与程序设计自考怎么过