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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: 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 |
+----+-------+------+------+

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
SQL 存储 关系型数据库
MySQL not exists 真的不走索引么
MySQL not exists 真的不走索引么
40 0
|
2月前
|
SQL 人工智能 关系型数据库
mysql中in 和exists的区别
mysql中in 和exists的区别
|
2月前
|
关系型数据库 MySQL 索引
【mysql】 limit 关键字
【mysql】 limit 关键字
112 0
|
18天前
|
SQL 关系型数据库 MySQL
MySQL数据库子查询练习——EXISTS(存在)
MySQL数据库子查询练习——EXISTS(存在)
13 1
|
11天前
|
关系型数据库 MySQL 测试技术
MYSQL中EXISTS的用法
MYSQL中EXISTS的用法
|
14天前
|
关系型数据库 MySQL 索引
【随手记】MySQL中的DISTINCT关键字
【随手记】MySQL中的DISTINCT关键字
23 0
|
2月前
|
关系型数据库 MySQL
MySQL 的 union 和union all 的区别
【5月更文挑战第4天】MySQL 的 union 和union all 的区别
38 7
|
7月前
|
SQL 关系型数据库 MySQL
MySQL 中exists与in及any的用法详解
MySQL 中exists与in及any的用法详解
76 3
|
2月前
|
SQL 关系型数据库 MySQL
MySQL第三战:CRUD,函数1以及union&union all
MySQL第三战:CRUD,函数1以及union&union all
|
2月前
|
关系型数据库 MySQL
MySQL union和union all的用法详解和区别
MySQL union和union all的用法详解和区别
45 0