MySQL 列子查询及 IN、ANY、SOME 和 ALL 操作符的使用(转)
2024-09-04 05:29:59
MySQL 列子查询
列子查询是指子查询返回的结果集是 N 行一列,该结果通常来自对表的某个字段查询返回。
一个列子查询的例子如下:
SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=1)
该例子在前文《MySQL 子查询subquery语法与用法实例》已有解释及数据实例,在此不再赘述。
列子查询中使用 IN、ANY、SOME 和 ALL 操作符
由于列子查询返回的结果集是 N 行一列,因此不能直接使用 = > < >= <= <> 这些比较标量结果的操作符。在列子查询中可以使用 IN、ANY、SOME 和 ALL 操作符:
- IN:在指定项内,同 IN(项1,项2,…)。
- ANY:与比较操作符联合使用,表示与子查询返回的任何值比较为 TRUE ,则返回 TRUE 。
- SOME:ANY 的别名,较少使用。
- ALL:与比较操作符联合使用,表示与子查询返回的所有值比较都为 TRUE ,则返回 TRUE 。
下面是原始数据表:
s1 |
---|
2 |
10 |
s2 |
---|
5 |
12 |
20 |
ANY 操作符
ANY 关键字必须接在一个比较操作符的后面,表示与子查询返回的任何值比较为 TRUE ,则返回 TRUE 。一个 ANY 例子如下:
SELECT s1 FROM table1 WHERE s1 > ANY (SELECT s2 FROM table2)
查询返回结果如下所示:
s1 |
---|
10 |
在子查询中,返回的是 table2 的所有 s2 列结果(5,12,20),然后将 table1 中的 s1 的值与之进行比较,只要大于 s2 的任何值即表示为 TRUE,符合查询条件。
IN 是 = ANY 的别名,二者相同,但 NOT IN 的别名却不是 <> ANY 而是 <> SOME。
特殊情况
- 如果 table2 为空表,则 ANY 后的结果为 FALSE;
- 如果子查询返回如 (NULL,NULL,NULL) 列为空的结果,则 ANY 后的结果为 UNKNOWN 。
ALL 操作符
ALL 关键字必须接在一个比较操作符的后面,表示与子查询返回的所有值比较为 TRUE ,则返回 TRUE 。一个 ALL 例子如下:
SELECT s1 FROM table1 WHERE s1 > ALL (SELECT s2 FROM table2)
该查询不会返回任何结果,因为 s1 中没有比 s2 所有值都大的值。
当然在该例子查询中,返回了 s2 的所有值,您可以在该子查询中添加任何条件以限制返回的查询结果而无需全部返回。
NOT IN 是 <> ALL 的别名,二者相同。
特殊情况
- 如果 table2 为空表,则 ALL 后的结果为 TRUE;
- 如果子查询返回如 (0,NULL,1) 这种尽管 s1 比返回结果都大,但有空行的结果,则 ALL 后的结果为 UNKNOWN 。
注意:对于 table2 空表的情况,下面的语句均返回 NULL:
SELECT s1 FROM table1 WHERE s1 > (SELECT s2 FROM table2)
SELECT s1 FROM table1 WHERE s1 > ALL (SELECT MAX(s1) FROM table2)
本章节内容共分 8 部分:
- 1. MySQL 子查询(subquery)语法与用法实例
- 2. MySQL 标量子查询
- 3. MySQL 列子查询及 IN、ANY、SOME 和 ALL 操作符的使用
- 4. MySQL 行子查询
- 5. MySQL 表子查询
- 6. MySQL FROM 子查询
- 7. MySQL 子查询 EXISTS 和 NOT EXISTS
- 8. MySQL 关联子查询
最新文章
- C#设计模式-策略者模式
- java中文乱码解决之道(三)-----编码详情:伟大的创想---Unicode编码
- Django入门实践(3)
- Effective C++ -----条款11: 在operator=中处理“自我赋值”
- Windows Server 2008 DNS服务器安装与配置
- 【Linux工具】GIT+Gollum在Ubuntu下搭建本地WIKI编辑系统
- JAX-RS入门 二 :运行
- putty保持连接不自动段开
- java static关键字
- Java 简单的 socket 编程入门实战
- 机器学习基石笔记:01 The Learning Problem
- 简易OA漫谈之工作流设计(五,直接上级)
- SOCKET选项
- immutability因React官方出镜之使用总结分享!
- ES--03
- Shift键的三个妙用!Word又现神操作!
- Android Jetpack 概述
- 【Little Demo】左右按钮tab选项卡双切换
- JS 随机排序算法
- Ajax请求php返回json对象数据中包含有数字索引和字符串索引,在for in循环中取出数据的顺序问题
热门文章
- Spring Bean基本管理--bean注入方式汇总
- 【LeetCode 215】Kth Largest Element in an Array
- 常见设计模式解析和实现(C++)Prototype模式(原型模式)
- 差分信号(Differential Signal)
- 基本输入输出系统BIOS---显示输出
- hadoop 权限错误 Permission denied: user=root, access=WRITE, inode=";/";:hdfs:super
- oc_转_构造对象的方法,以及类的继承
- php pdo(二)
- 树莓派I2C连接18B20
- 文本分类之特征描述vsm和bow