我试图理解如何使用WITH从句以及WITH从句的目的。

我所理解的是,WITH子句是普通子查询的替代品。

谁能给我举个小例子详细解释一下吗?


当前回答

SQL WITH子句是由Oracle在Oracle 9i release 2数据库中引入的。SQL WITH子句允许您为子查询块指定名称(这个过程也称为子查询重构),可以在主SQL查询中的多个位置引用该名称。分配给子查询的名称被视为内联视图或表。SQL WITH子句基本上是普通子查询的直接替换。

SQL WITH子句的语法

下面是使用单个子查询别名时的SQL WITH子句语法。

WITH <alias_name> AS (sql_subquery_statement)
SELECT column_list FROM <alias_name>[,table_name]
[WHERE <join_condition>]

当使用多个子查询别名时,语法如下所示。

WITH <alias_name_A> AS (sql_subquery_statement),
<alias_name_B> AS(sql_subquery_statement_from_alias_name_A
or sql_subquery_statement )
SELECT <column_list>
FROM <alias_name_A>, <alias_name_B> [,table_names]
[WHERE <join_condition>]

在上面的语法文档中,alias_name的出现是在AS子句之后给予子查询的有意义的名称。每个子查询应该用逗号分隔。其余的查询遵循简单和复杂SQL SELECT查询的标准格式。

欲了解更多信息:http://www.brighthub.com/internet/web-development/articles/91893.aspx

其他回答

SQL WITH子句是由Oracle在Oracle 9i release 2数据库中引入的。SQL WITH子句允许您为子查询块指定名称(这个过程也称为子查询重构),可以在主SQL查询中的多个位置引用该名称。分配给子查询的名称被视为内联视图或表。SQL WITH子句基本上是普通子查询的直接替换。

SQL WITH子句的语法

下面是使用单个子查询别名时的SQL WITH子句语法。

WITH <alias_name> AS (sql_subquery_statement)
SELECT column_list FROM <alias_name>[,table_name]
[WHERE <join_condition>]

当使用多个子查询别名时,语法如下所示。

WITH <alias_name_A> AS (sql_subquery_statement),
<alias_name_B> AS(sql_subquery_statement_from_alias_name_A
or sql_subquery_statement )
SELECT <column_list>
FROM <alias_name_A>, <alias_name_B> [,table_names]
[WHERE <join_condition>]

在上面的语法文档中,alias_name的出现是在AS子句之后给予子查询的有意义的名称。每个子查询应该用逗号分隔。其余的查询遵循简单和复杂SQL SELECT查询的标准格式。

欲了解更多信息:http://www.brighthub.com/internet/web-development/articles/91893.aspx

这个问题在这里得到了充分的回答。

请参阅Oracle关于SELECT的文档,了解子查询分解是如何工作的,以及Mark的示例:

WITH employee AS (SELECT * FROM Employees)
SELECT * FROM employee WHERE ID < 20
UNION ALL
SELECT * FROM employee WHERE Sex = 'M'