#### 13.2.11.2 使用子查询的比较

子查询最常见的用法是：

```
non_subquery_operand comparison_operator (subquery)
```

在哪里*`比较运算符`*是以下运算符之一：

```
=  >  <  >=  <=  <>  !=  <=>
```

例如：

```
... WHERE 'a' = (SELECT column1 FROM t1)
```

MySQL 也允许这种结构：

```
non_subquery_operand LIKE (subquery)
```

曾经，子查询的唯一合法位置是在比较的右侧，您可能仍然会发现一些坚持这一点的旧 DBMS。

以下是您无法使用联接进行的通用形式子查询比较的示例。它找到表中的所有行`t1`为此`第 1 列`值等于表中的最大值`t2`：

```
SELECT * FROM t1
  WHERE column1 = (SELECT MAX(column2) FROM t2);
```

这是另一个示例，这对于连接也是不可能的，因为它涉及聚合其中一个表。它找到表中的所有行`t1`包含在给定列中出现两次的值：

```
SELECT * FROM t1 AS t
  WHERE 2 = (SELECT COUNT(*) FROM t1 WHERE t1.id = t.id);
```

为了将子查询与标量进行比较，子查询必须返回一个标量。为了将子查询与行构造函数进行比较，子查询必须是行子查询，它返回与行构造函数具有相同数量值的行。看[第 13.2.11.5 节，“行子查询”](row-subqueries.html).
