只有在满足以下两个条件后,跟随在关键字 EXISTS 之后的子查询才可转换为连接:
主查询不包含 GROUP BY 子句并且不是汇总查询,或者子查询恰好返回一个值。
联合 [EXISTS(子查询)] 不被取非。
该子查询是相关的;即,它包含外部引用。
[哪些客户在 2001 年 7 月 13 日之后下了订单] 的请求可使用此类查询(其未取非的子查询包含外部引用 customer.id = sales_order.cust_id)以公式的形式表示出来,因此,可转换为连接。
SELECT fname, lname FROM customer WHERE EXISTS ( SELECT * FROM sales_order WHERE (order_date > '2001-07-13') AND (customer.id = sales_order.cust_id))
EXISTS 关键字主要用来告诉数据库服务器检查空结果集。在使用内连接时,数据库服务器自动只显示这样的行:这些行的数据来自 FROM 子句中的所有表。因此,该查询返回的行与具有以下子查询的查询所返回的行相同:
SELECT fname, lname FROM customer, sales_order WHERE (sales_order.order_date > '2001-07-13') AND (customer.id = sales_order.cust_id)
SQL Anywhere Studio 9.0.2
版权所有 © 1989–2005 Sybase, Inc. 部分版权所有 © 2001–2005 iAnywhere Solutions, Inc. 保留所有权利。