SQL WITH子句示例

186 sql with-clause

可能重复:
CTE和SubQuery之间的区别?

我试图了解如何使用该WITH条款和该条款的目的WITH.

我理解的只是,该WITH条款取代了正常的子查询.

任何人都可以通过一个小例子详细解释这个问题吗?

cc4*_*4re 239

SQL 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>]
Run Code Online (Sandbox Code Playgroud)

使用多个子查询别名时,语法如下.

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>]
Run Code Online (Sandbox Code Playgroud)

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

有关更多信息,请访问:http://www.brighthub.com/internet/web-development/articles/91893.aspx

  • 我认为在使用多个子查询别名时,在WITH` <alias_name_A> AS(sql_subquery_statement)`之后需要一个逗号. (14认同)
  • 这并不是一个真正的例子 (4认同)
  • :我已经看过了,你能用一个小例子解释一下这个例子会更容易理解. (2认同)

Lor*_*uer 84

这已经完全回答这里.

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

WITH employee AS (SELECT * FROM Employees)
SELECT * FROM employee WHERE ID < 20
UNION ALL
SELECT * FROM employee WHERE Sex = 'M'
Run Code Online (Sandbox Code Playgroud)

  • 是的,基本上它取代了子查询但是允许你在多个地方引用"子查询"结果. (3认同)
  • 特别感谢您提供带有链接的第一句话:) (2认同)