子查询最常见的用法是:
non_subquery_operand comparison_operator (subquery)
comparison_operator
这些运算符之一
在哪里:
= > < >= <= <> != <=>
例如:
... WHERE 'a' = (SELECT column1 FROM t1)
MySQL 也允许这种结构:
non_subquery_operand LIKE (subquery)
曾几何时,子查询的唯一合法位置是在比较的右侧,您可能仍然会发现一些旧的 DBMS 坚持这样做。
下面是一个常见形式的子查询比较示例,您不能使用连接进行比较。t1
它在表中查找column1
值等于表中最大值
的所有行
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 节,“行子查询”。