Skip to content

Latest commit

 

History

History
70 lines (49 loc) · 1.6 KB

File metadata and controls

70 lines (49 loc) · 1.6 KB

子查询

子查询是指把一个查询语句嵌套在另一个查询语句中。它常用于“先查出一组结果,再把这组结果作为另一个查询的条件或数据来源”。

带ANY、SOME关键字的子查询

ANYSOME 在 MySQL 中语义相近,表示“满足子查询结果中的任意一个值即可”。

例如:

SELECT *
FROM product
WHERE price > ANY (
  SELECT price
  FROM product
  WHERE category_id = 1
);

这表示:只要价格大于子查询结果中的任意一个值,就满足条件。

在实际业务中,ANY / SOME 不如普通 INEXISTS 使用频率高,但理解它们有助于掌握更完整的 SQL 语义。

带ALL关键字的子查询

ALL 表示“必须满足子查询结果中的所有值”。

例如:

SELECT *
FROM product
WHERE price > ALL (
  SELECT price
  FROM product
  WHERE category_id = 1
);

这表示当前商品价格必须大于分类 1 中的所有商品价格,也就是大于该分类中的最大值。

带EXISTS关键字的子查询

EXISTS 用于判断子查询是否返回记录。

例如查询“存在订单的用户”:

SELECT *
FROM user AS u
WHERE EXISTS (
  SELECT 1
  FROM orders AS o
  WHERE o.user_id = u.id
);

如果子查询能查到记录,则 EXISTS 条件成立。

它适合:

  • 判断关联数据是否存在
  • 做存在性筛选
  • 某些场景下替代 IN

小结

子查询的核心思想是“先查一次,再把结果给外层查询使用”。ANY / SOME 强调任意满足,ALL 强调全部满足,EXISTS 强调是否存在记录。