需求:

在MySQL中 EXISTS 和 IN 的用法有什么关系和区别呢?

假定数据库中有两个表 分别为 表 a 和表 b:

create tablea

(

a_idint,

a_namevarchar(20)

)create tableb

(

b_idint,

b_namevarchar(20)

)

那么:

select * from a where a_name in (select b_name from b)

这条SQL语句的意义很明显是选取满足where条件下 a 中的所有列的数据 。而where条件就是a_name要是所有b_name的其中的一个。

即假设 b 中的 b_name 有 {'john','peter','baron'} 这些,而a中的某条数据中的a_name恰好是其中一个,那么这行数据就会被选取出来。

而使用EXISTS:

select * from a where exists (select b_id from b where b.b_name=a.a_name)

执行的结果与上面使用 in 返回的结果是一样的。

那么为什么会这样呢,子查询中 返回的列是 b_id ,并没有 name啊。

原因就是exists子句返回的结果并不是从数据库中取出的结果集,而是一个布尔值,如果子句查询到数据,那么返回true,反之返回false。

所以子句中选择的列根本就不重要,而重要的是where 后的条件。如果返回了true,那么相当于直接执行了子句 where 后的部分,

即把a_name 和 b_name 作比较,如果相等则返回这条数据。所以执行的结果和前面使用 in 的返回的结果是一致的。

有趣的是,MySQL内部优化器会把第一条使用 in 的语句转化为第二条使用 exists 的语句执行。执行的结果当然就是一样的了。

mysql中有exist吗_关于MySQL 中 EXISTS 的用法相关推荐

  1. mysql 中有什么命令_常用mysql命令大全

    常用的MySQL命令大全 连接MySQL格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1:连接到本机上的MYSQL. 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命 ...

  2. MySQL中EXISTS的用法

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

  3. SQL语句中EXISTS的用法

    记录:258 在业务开展中,会遇到类似需求. 需求1:UPDATE表TEST_TB01中的记录:满足条件:这些记录不在TEST_TB02中. 需求2:UPDATE表TEST_TB01中的记录:满足条件 ...

  4. mysql以user1登录_在mysql中创建用户后不能本地登录的解决方法

    在安装完成MySQL后,我们通常添加拥有相应权限的普通用户用来访问数据库.在使用用户本地登录数据库的时候,经常会出现怎么登录也无法登录的情况,但是从其他的mysql客户端却可以登录. [root@my ...

  5. mysql修复损坏表_在MySQL中,如何修复损坏的表

    本指南旨在作为故障排除资源和诊断MySQL设置的起点. 有时,MySQL表损坏,这意味着发生了错误,并且其中的数据无法读取. 损坏表的一些常见原因是:MySQL服务器在写数据的时候停止.外部程序同时修 ...

  6. mysql 添加int列_在MySQL中现有的int列的值中添加字符?

    要将字符添加到现有的int列值中,请使用MySQL CONCAT().让我们首先创建一个表-mysql> create table DemoTable ( Amount int ); 使用插入命 ...

  7. mysql shell 所有表_删除mysql数据库中所有表的shell脚本

    分享一个可以删除mysql中所有表的shell脚本,代码如下: 复制代码 代码示例: #!/bin/bash # 删除mysql中所有表 # 示例: # Usage: ./script user pa ...

  8. mysql zerofill设置方法_在MySQL中使用ZEROFILL设置自定义自动增量

    让我们首先创建一个表.这里.我们使用ZEROFILL和AUTO_INCREMENT设置了UserId列mysql> create table DemoTable1831 ( UserId int ...

  9. mysql 如何对表排序_学习MySQL:对表中的数据进行排序和过滤

    mysql 如何对表排序 In this article, we will learn how we can sort and filter data using the WHERE clause a ...

最新文章

  1. 发表的原创文章还希望大家多提宝贵意见!
  2. 使用 Python 制作属于自己的 PDF 电子书
  3. Linux apache源码安装自定义Server
  4. 网页服务器和mysql服务器_实现Web服务器之间使用同一个MYSQL和相同的网页配置文件的方法...
  5. 真正的大学老师,是那些无需打卡和考评,也会不可遏止地要去读书写作和上课的人...
  6. spring elasticsearch 按条件删除_实战:项目数据源转为Elasticsearch
  7. java责任链设计模式 订单_Java责任链设计模式实例分析
  8. 如果成为一名高级安卓开发_想成为一名开发人员? 这是您需要考虑的。
  9. android支付宝余额怎么做,android实现类似于支付宝余额快速闪动的效果
  10. Beautiful选择器/遍历文档树Day3-7
  11. FreeType 使用FT_MEM_ALLOC/FT_FREE内存操作
  12. PHP生成excel表格文件并下载
  13. git日志 每天导出 shell脚本
  14. Markdown中的二级标题去掉默认的下划线
  15. Win10安装-我们无法创建新的分区,也找不到现有的分区
  16. ALM/QC11.0在win8/IE11下无法浏览
  17. mysql 浏览量统计_统计网站的每日访问量
  18. Largest Submatrix (最大全1子矩阵)
  19. IDEA debug热部署配置
  20. 用python的django完成一个登录小案例

热门文章

  1. 批处理-删除环境变量
  2. HTML 5--Grouping and Nesting Styles
  3. Java常用api和操作必背
  4. Android开发学习之路-LruCache使用和源码分析
  5. Swift - 05 - 数值型字面量
  6. 弃用数据库自增ID,曝光一下我自己用到的解决方法之---终结篇
  7. linux中用shell脚本对tomcat和nginx做日志切割
  8. Ubuntu中zabbix 4.2.6监控postgresql数据库
  9. kafka shutdown停止关闭很慢问题的解决方案
  10. 解决文件下载在火狐浏览器出现中文文件名乱码的方法