Mysql any、some、in、all、exists 关键字

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: Mysql any、some、in、all、exists 关键字

mysql> select * from test;
+----+--------+------+------+
| id | name   | sex  | age  |
+----+--------+------+------+
|  1 | name1  | 女   |   15 |
|  2 | name1  | 女   |   15 |
|  4 | name2  | 男   |   30 |
|  5 | name50 | 男   |   12 |
+----+--------+------+------+
  • in 关键字
in 关键字在子查询中主要用在列子查询中代替人为手罗列出来的多个“字面值”数据。
举例:
select * from 表名 where 地区 in ('上海', '北京', ...);
select * from 表名 where 地区 in (select 地区列表 from 地图表数据);
  • any关键字
any 可以与(=、>、>=、<、<=、<>)结合起来使用,分别表示等于、大于、大于等于、小于、小于等于、不等于其中的任何一个数据。
any 关键字用在比较操作符(=、>、>=、<、<=、<>...)的后面,表示查询结果的多个数据中的任一个满足该比较操作符就算满足。
语法形式:
select * from 表名 where 字段名=any(必须为子查询);
结果相当于:
select * from 表名 where 字段名=值1 or 字段名=值2 or 字段名=值3 or ...;
注意:any()括号不可以写成固定值,必须为子查询,这种写法是错误的:
select * from 表名 where 字段名=any(1, 2, 3);
举例:
select * from 表名 where 字段名=any(select 字段名 from 表名);
  • some关键字
some 的作用与使用跟 any 一样,两者没差别
  • all 关键字
all 可以与(=、>、>=、<、<=、<>)结合是来使用,分别表示等于、大于、大于等于、小于、小于等于、不等于其中的其中的所有数据。
all 关键字用在比较操作符(=、>、>=、<、<=、<>...)的后面,表示查询结果的多个数据中的所有都满足该比较操作符才算满足。
语法形式:
select * from 表名 where 字段名>all(必须为子查询);
结果相当于:
select * from 表名 where 字段名>值1 and 字段名>值2 and 字段名>值3 and ...;
注意:all()括号不可以写成固定值,必须为子查询,这种写法是错误的:
select * from 表名 where 字段名>all(1, 2, 3);
举例:
select * from 表名 where 字段名>all(select 字段名 from 表名);
  • exists 关键字
含义:
该子查询如果“有数据”则该 exists() 的结果为 "true" 即相当于 where true。
该子查询如果“没有数据”则该 exists() 的结果为 "false" 即相当于 where false。
语法形式:
select * from 表名 where exists(任何子查询);
举例:
两个表:商品信息表(包含商品类型ID)  商品类型表(电器类、日常用品类)
查询出商品类型名称带 "电" 字的所有商品信息
select * from 商品信息表 where exists (select * from 商品类型表 like '%电%' and 商品信息表.商品类型ID = 商品类型表.商品类型ID)
如果表里面有大于30岁的则显示列出所有数据
mysql> select * from test where exists(select * from test where age>30);
Empty set (0.00 sec)
如果表里面有大于15岁的则显示列出所有数据
mysql> select * from test where exists(select * from test where age>15);
+----+--------+------+------+
| id | name   | sex  | age  |
+----+--------+------+------+
|  1 | name1  | 女   |   15 |
|  2 | name1  | 女   |   15 |
|  4 | name2  | 男   |   30 |
|  5 | name50 | 男   |   12 |
+----+--------+------+------+
mysql> select * from test as t1 where exists(select * from test as t2 where t2.age>15 and t1.age > 15);
+----+-------+------+------+
| id | name  | sex  | age  |
+----+-------+------+------+
|  4 | name2 | 男   |   30 |
+----+-------+------+------+
mysql> select * from test as t1 where exists(select * from test as t2 where t1.age > 15);
+----+-------+------+------+
| id | name  | sex  | age  |
+----+-------+------+------+
|  4 | name2 | 男   |   30 |
+----+-------+------+------+

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
SQL 存储 关系型数据库
MySQL not exists 真的不走索引么
MySQL not exists 真的不走索引么
163 0
|
3月前
|
关系型数据库 MySQL 索引
mysql中EXISTS用法注意点
mysql中EXISTS用法注意点
|
6月前
|
SQL 关系型数据库 MySQL
MySQL数据库子查询练习——EXISTS(存在)
MySQL数据库子查询练习——EXISTS(存在)
85 1
|
3月前
|
SQL 存储 关系型数据库
MySQL in和exists的取舍
本文讨论了SQL查询中IN和EXISTS的使用场景及其区别。IN适用于外表大而内表小的情况,会将子查询结果存储在临时表中;EXISTS则以外表为驱动表,适合外表小而内表大的情况,且不生成临时表。结论是:当子查询数据量大时,应使用EXISTS。
107 8
|
4月前
|
SQL 存储 关系型数据库
MySQL in和exists的取舍
介绍了SQL中`in`与`exists`的选择策略:`in`适用于外表大而内表小的情况,先执行子查询并存储结果,再遍历外表匹配;`exists`则以外层表为驱动,适合外表小而内表大的场景,直接检查内表是否存在匹配项,无需创建临时表。选择依据为表大小及查询效率。
|
4月前
|
SQL 关系型数据库 MySQL
在 MySQL 中使用 Exists
【8月更文挑战第11天】
583 0
在 MySQL 中使用 Exists
|
5月前
|
关系型数据库 MySQL 数据库
MySQL:union all与union区别详解
MySQL:union all与union区别详解
106 0
|
6月前
|
关系型数据库 MySQL 索引
【随手记】MySQL中的DISTINCT关键字
【随手记】MySQL中的DISTINCT关键字
81 0
|
7月前
|
关系型数据库 MySQL
MySQL 的 union 和union all 的区别
【5月更文挑战第4天】MySQL 的 union 和union all 的区别
216 7
|
7月前
|
SQL 关系型数据库 MySQL
mysql查询语句的访问方法const、ref、ref_or_null、range、index、all
mysql查询语句的访问方法const、ref、ref_or_null、range、index、all