关系数据库将有关不同类型的对象的信息存储在不同的表中。例如,您应该将与产品有关的信息存储在一个表中,将与销售订单有关的信息存储在另一个表中。产品表包含与各种产品有关的信息。销售订单项表包含与客户的订单有关的信息。
通常,仅使用一个表只能回答最简单的问题。例如,如果公司在产品库存量不足 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 子句指定的。
SQL Anywhere Studio 9.0.2
版权所有 © 1989–2005 Sybase, Inc. 部分版权所有 © 2001–2005 iAnywhere Solutions, Inc. 保留所有权利。