MySQL 列子查询及 IN、ANY、SOME 和 ALL 操作符的使用(转)
2014-02-08 15:31
555 查看
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 |
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 关联子查询
相关文章推荐
- MySQL 列子查询及 IN、ANY、SOME 和 ALL 操作符的使用
- MySQL 列子查询及 IN、ANY、SOME 和 ALL 操作符的使用
- 数据库——IN、ANY、SOME 和 ALL 操作符的使用
- MySQL中子查询IN,EXISTS,ANY,ALL,SOME,UNION介绍
- mysql子查询用limit报错( “This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME subquery’ ”)
- [Err] 1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
- Mysql:This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME 错误解决
- This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery
- sql查询关建字之-exists, in. all, any, some
- This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME 错误解决
- mysql笔记-[Err] 1235 - This version of MariaDB doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
- This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME
- mysql error This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery
- 在oracle的子查询中使用some,any和all
- This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME subquery
- 在oracle的子查询中使用some,any和all
- sql中用于子查询的几个关键词 any(some是 any的别名),all,in,exists
- msyql中子查询IN,EXISTS,ANY,ALL,SOME,UNION介绍
- 在oracle的子查询中使用some,any和all
- MySQL嵌套查询“LIMIT & IN/ALL/ANY/SOME”错误解决方法