Mysql学习(十)-- Mysql子查询关键字的使用(in和exists)

1. in

1.1 格式:

在这里插入图片描述

1.2 特点:

  • in用于判断某个记录的值,是否在指定的集合中
  • 在in关键字前边加上not可以将条件反过来

1.3 操作:

在这里插入图片描述

2. exist

2.1 格式:

在这里插入图片描述

2.2 特点:

  • 该子查询如果“有数据结果”(至少返回一行数据),则该EXISTS()结果为:true,外层查询执行
  • 该子查询如果“没有数据结果”(没有任何数据返回),则该EXISTS()结果为:false,外层查询不执行
  • EXISTS后面的子查询不返回任何实际数据,只返回真或假,当返回真时where条件成立
  • 注意:EXISTS关键字,比IN关键字的运算效率高,因此,在实际开发中,特别是大数据量时,推荐使用EXISTS关键字

2.3 操作:

在这里插入图片描述

2.4 解释:

外层查询进行查询时,外层查询会一行一行执行,第一行执行时,判断子查询是否为true,为true则此行数据被查出,接着第二行查询。。。,以此往复。

3. in 和 exists 区别

mysql中的in语句是把外表和内表作hash 连接,而exists语句是对外表作loop循环,每次loop循环再对内表进行查询。一直大家都认为exists比in语句的效率要高,这种说法其实是不准确的。这个是要区分环境的。

  1. 如果查询的两个表大小相当,那么用in和exists差别不大。
  2. 如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in。
  3. not in 和not exists:如果查询语句使用了not in,那么内外表都进行全表扫描,没有用到索引;而not extsts的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快

4. all

1.1 格式:

在这里插入图片描述

1.2 特点:

  • all:与子查询返回的所有值比较为true则返回true
  • all可以与=,>=,>,<,<=,<>结合使用,分别表示等于,大于等于,大于,小于,小于等于,不等于其中的所有数据
  • 大于all表示指定列中的值必须要大于子查询集中的每一个值,即必须要大于子查询集的最大值;如果是小于即小于子查询中的最小值。
    • 可以通过子查询优化,比如子查询中先查出最大值

1.3 操作:

在这里插入图片描述

5. any(some)

1.1 格式:

在这里插入图片描述

1.2 特点:

  • any:与子查询返回的所有值比较为true则返回true
  • any可以与=,>=,>,<,<=,<>结合使用,分别表示等于,大于等于,大于,小于,小于等于,不等于其中的任何一个数据
  • 大于any表示指定列中的值必须要大于子查询集中的任何一个值,即必须要大于子查询集的最小值;其他同理
  • some可以理解为any的别名

1.3 操作:

在这里插入图片描述

  • 8
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值