#### 13.2.11.4所有子查询

[](<>)[](<>)

语法：

```
operand comparison_operator ALL (subquery)
```

这个词`全部的`，必须跟在比较运算符后面，表示“返回”`符合事实的`如果比较是正确的`符合事实的`对于`全部的`子查询返回的列中的值。”例如：

```
SELECT s1 FROM t1 WHERE s1 > ALL (SELECT s1 FROM t2);
```

假设表中有一行`t1`包含`(10)`.表达方式是`符合事实的`如果桌子`t2`包含`(-5,0,+5)`因为`10`大于中的所有三个值`t2`.表达方式是`错误的`如果桌子`t2`包含`（12,6，空，-100）`因为只有一个值`12`在桌子上`t2`这比`10`.表达方式是*未知的*（即，`无效的`)如果桌子`t2`包含`（0，空，1）`.

最后，这个表达是`符合事实的`如果桌子`t2`是空的。下面的表达式是`符合事实的`什么时候吃饭`t2`是空的：

```
SELECT * FROM t1 WHERE 1 > ALL (SELECT s1 FROM t2);
```

但这个表达是`无效的`什么时候吃饭`t2`是空的：

```
SELECT * FROM t1 WHERE 1 > (SELECT s1 FROM t2);
```

此外，下面的表达式是`无效的`什么时候吃饭`t2`是空的：

```
SELECT * FROM t1 WHERE 1 > ALL (SELECT MAX(s1) FROM t2);
```

一般来说*包含`无效的`价值观*和*空桌子*是“边缘案例”在编写子查询时，总是考虑是否考虑了这两种可能性。

`不在`是的别名`<>全部`因此，这两种说法是相同的：

```
SELECT s1 FROM t1 WHERE s1 <> ALL (SELECT s1 FROM t2);
SELECT s1 FROM t1 WHERE s1 NOT IN (SELECT s1 FROM t2);
```

MySQL 8.0.19支持[`桌子`](table.html)陈述就像`在里面`, `任何`和`一些`，你可以使用`桌子`具有`全部的`和`不在`前提是满足以下两个条件：

-   子查询中的表只包含一列

-   子查询不依赖于列表达式

    例如，假设那张桌子`t2`由一列组成，前面显示的最后两条语句可以使用`表t2`这样地：


```
SELECT s1 FROM t1 WHERE s1 <> ALL (TABLE t2);
SELECT s1 FROM t1 WHERE s1 NOT IN (TABLE t2);
```

诸如`从t1中选择*其中1>全部（从t2中选择最大值（s1）；`不能使用`表t2`因为子查询依赖于列表达式。
