SQL WITH子句的例子

可能重复:
CTE和子查询之间的区别?

我试图了解如何使用WITH子句和WITH子句的用途。

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

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

SQL WITH子句是Oracle在Oracle 9i第2版数据库中引入的。 SQL WITH子句允许您为子查询块提供一个名称(一个进程也称为子查询重构),可以在主SQL查询中的多个位置引用该名称。 分配给子查询的名称被视为内联视图或表。 SQL WITH子句基本上是普通子查询的简单replace。

SQL WITH子句的语法

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

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

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

 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>, [tablenames] [WHERE <join_condition>] 

在上面的语法文档中,出现的alias_name是一个有意义的名称,您可以在AS子句之后给子查询。 每个子查询应该用WITH语句的逗号分隔。 其余的查询遵循简单和复杂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' 
Interesting Posts