Collection Contents 上一页 下一页 PDF

ASA SQL 用户指南

使用子查询

子查询简介


关系数据库将有关不同类型的对象的信息存储在不同的表中。例如,您应该将与产品有关的信息存储在一个表中,将与销售订单有关的信息存储在另一个表中。产品表包含与各种产品有关的信息。销售订单项表包含与客户的订单有关的信息。

通常,仅使用一个表只能回答最简单的问题。例如,如果公司在产品库存量不足 50 的情况下重新订购这些产品,则可以使用下面的查询回答 [哪些产品接近库存不足?] 的问题。

SELECT id, name, description, quantity
FROM product
WHERE quantity < 50

但是,如果 [接近库存不足] 取决于典型客户所订购的每一类型的产品的数量,则必须用取自 sales_order_items 表的值来替代数字"50"。

子查询的结构 

子查询的结构类似于常规查询,并且出现在主查询的 SELECT、FROM、WHERE 或 HAVING 子句中。继续看上一个例子,您可以使用子查询来选择客户订购的产品的平均数,然后在主查询中使用该平均数查找接近库存不足的产品。以下查询查找子查询中产品的名称和说明,这些产品的数目小于客户订购的每一类型的产品的平均数目的两倍。

SELECT name, description
FROM product WHERE quantity <  2 * (
   SELECT avg(quantity)
   FROM sales_order_items
   )

在 WHERE 子句中,子查询帮助从 FROM 子句中列出的表中选择那些在查询结果中出现的行。在 HAVING 子句中,子查询帮助选择在查询结果中出现的行组,这些行组是由主查询的 GROUP BY 子句指定的。


Collection Contents 上一页 下一页 PDF