SQL WITH子句示例

时间:2012-09-23 12:14:38

标签: sql with-clause

  

可能重复:
  Difference between CTE and SubQuery?

我试图了解如何使用WITH子句以及WITH子句的目的。

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

有人可以用一个小例子详细解释这个吗?

2 个答案:

答案 0 :(得分:224)

Oracle WITH子句是Oracle在Oracle 9i第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子句之后为子查询提供的有意义的名称。每个子查询都应使用逗号Example for WITH statement分隔。其余查询遵循简单和复杂SQL SELECT查询的标准格式。

有关详细信息:http://www.brighthub.com/internet/web-development/articles/91893.aspx

答案 1 :(得分:78)

已经完全回答here

请参阅Oracle's docs on SELECT以了解子查询因子如何工作,以及Mark的示例:

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