MySQL的SQL语句 - 数据操作语句(13)- 子查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL的SQL语句 - 数据操作语句(13)- 子查询相关的知识,希望对你有一定的参考价值。

带有 ANY、IN 或 SOME 的子查询

1. operand comparison_operator ANY (subquery)
2. operand IN (subquery)
3. operand comparison_operator SOME (subquery)

其中 comparison_operator 是以下运算符之一:

1. =  >  <  >=  <=  <>  !=

ANY 关键字必须跟在比较运算符之后,表示“如果子查询返回的列中的任何值的比较结果为真,则返回 TRUE”。例如:

1. SELECT s1 FROM t1 WHERE s1 > ANY (SELECT s1 FROM t2);

假设表 t1 中有一行包含 (10)。如果表 t2 包含 (21,14,7),则表达式为真,因为 t2 中的值 7 小于 10。如果表 t2 包含 (20,10),或者表 t2 为空,则表达式为 FALSE。如果表 t2 包含 (NULL,NULL,NULL),则表达式是未知的(即 NULL)。

与子查询一起使用时,IN 是 = ANY 的别名。因此,这两个语句是相同的:

1. SELECT s1 FROM t1 WHERE s1 = ANY (SELECT s1 FROM t2);
2.SELECT s1 FROM t1 WHERE s1 IN    (SELECT s1 FROM t2); 

与表达式列表一起使用时,IN 和 = ANY 不是同义词。IN 可以接受表达式列表,但是 = ANY 不能。

NOT IN 不是 <> ANY 的别名,而是 <> ALL 的别名。

SOME 是 ANY 的别名。因此,这两种说法是相同的:

1. SELECT s1 FROM t1 WHERE s1 <> ANY  (SELECT s1 FROM t2);
2. SELECT s1 FROM t1 WHERE s1 <> SOME (SELECT s1 FROM t2);

SOME 这个词很少用,但这个例子说明了它可能有用的原因。对大多数人来说,英语短语“a 不等于任何 b”的意思是“没有 b 等于 a”,但这不是 SQL 语法的意思。语法的意思是“有一些 b 与 a 不相等”。使用 <> SOME 可以帮助确保每个人都理解查询的真正含义。

mysql 8.0.19 开始,只要表只包含一个列,就可以在标量 IN、ANY 或 SOME 子查询中使用 TABLE 语句。如果 t2 只有一列,则本节前面所示的语句可以按如下所示编写,在每种情况下,用 TABLE t2 代替 SELECT s1 FROM t2:

1.SELECT s1 FROM t1 WHERE s1 > ANY (TABLE t2);

2.SELECT s1 FROM t1 WHERE s1 = ANY (TABLE t2);

3.SELECT s1 FROM t1 WHERE s1 IN (TABLE t2);

4.SELECT s1 FROM t1 WHERE s1 <> ANY  (TABLE t2);

5.SELECT s1 FROM t1 WHERE s1 <> SOME (TABLE t2);

官方网址:
https://dev.mysql.com/doc/refman/8.0/en/any-in-some-subqueries.html

以上是关于MySQL的SQL语句 - 数据操作语句(13)- 子查询的主要内容,如果未能解决你的问题,请参考以下文章

MySQL的SQL语句 - 数据操作语句(13)- 子查询(11)

MySQL的SQL语句 - 数据操作语句(13)- 子查询

MySQL的SQL语句 - 数据操作语句(13)- 子查询

MySQL的SQL语句 - 数据操作语句(13)- 子查询

MySQL的SQL语句 - 数据操作语句(13)- 子查询

MySQL的SQL语句 - 数据操作语句(13)- 子查询