1. In a database system, a method for optimizing a database query for execution by a processor, the method comprising: receiving a database query including at least one subquery; building a query optimization graph for each query block of the database query, the query optimization graph including plan nodes representing subqueries of each query block; prior to optimization of a query block, identifying alternative strategies for evaluation of a subquery plan node of the query block based on subquery type and semantic properties of the database query; for each alternative strategy, pre-computing a subquery access method and subquery join method for use during optimization of the query block, wherein the subquery access method includes an estimate of execution costs; generating a set of access methods and join methods for other plan nodes of the query block; optimizing each query block to determine an optimal access plan for the query block based upon selecting pre-computed subquery access methods and join methods for subquery plan nodes of the query block as well as access methods, join methods, and join order for other plan nodes of the query block having favorable execution costs, wherein each query block is optimized without transformation of the subqueries using the pre-computed access methods and join methods; and constructing a detailed access plan for execution of the database query based upon the optimal access plan determined for each query block.
11. The method of claim 1 , wherein said step of creating a subquery access method includes generating an access method using an aggregate and then join subquery execution strategy for a subquery.