【问题标题】:SQL WITH clause example [duplicate]SQL WITH 子句示例 [重复]
【发布时间】:2012-09-15 03:51:17
【问题描述】:

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

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

谁能用一个小例子详细解释一下?

【问题讨论】:

标签: sql with-clause


【解决方案1】:

Oracle 在 Oracle 9i 第 2 版数据库中引入了 SQL WITH 子句。 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

【讨论】:

  • :我已经看过了,你能不能用一个更容易理解的小例子来解释一下。
  • 我认为在使用多个子查询别名时,您需要在 WITH &lt;alias_name_A&gt; AS (sql_subquery_statement) 之后使用逗号。
  • 这不是一个真正的例子
【解决方案2】:

这已完全回答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'

【讨论】:

  • 特别感谢第一句话的链接:)
  • 是的,基本上它取代了子查询,但允许您在多个地方引用“子查询”结果。
  • 您不应该在括号中提及属性而不是(SELECT * FROM Employees)吗?例如,WITH 员工 AS(姓名,ID)。
  • 在 MSSQL 中,您需要在 WITH 前添加分号 (;),否则会出现错误。应该是;WITH blabla AS ...)
猜你喜欢
  • 2019-04-06
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多