在SQL中,“with”子句和视图之间的关系是什么?

时间:2011-10-12 20:37:59

标签: sql

我正在阅读SQL中的视图,我对视图之间的相互作用感到困惑(我知道它们是出于安全原因而使用)和with子句(用于定义“临时视图”)其定义仅适用于出现with子句的查询“[Database System Concepts 5th ed。]) ))。

WITH max_balance(value) AS
SELECT MAX(balance)
FROM account
SELECT account_number
FROM account, max_balance
WHERE account.balance = max_balance.value

1 个答案:

答案 0 :(得分:4)

实际上使用视图有几个原因。最常见的两个是:

  • 安全性,允许用户在不看基础表的情况下查看数据
  • 简化,将SELECT查询存储为对象,并能够将结果集视为表格

从你的问题我假设你指的是CTE s,通常写成:

;WITH CTE AS
(
  SELECT Stuff...
  FROM Table
  WHERE things

)

CTE本质上是一次性视图 - 它只会持续到 NEXT QUERY 。在下一个查询之后,它不再被引用。

CTE主要用于简化复杂的数据集和递归。