SQL中from中的子查询和select之前的查询有什么区别?

What is the difference between subquery in from and query before select in TSQL?

我有两个问题:

SELECT *
FROM (
  SELECT id, name FROM t1
) AS t

t AS (
  SELECT id, name FROM t1
)
SELECT *;

他们在做同样的事情吗?一个比另一个更受欢迎吗?

第二个查询应该是:

WITH t AS (
  SELECT id, name FROM t1
)
SELECT *
FROM t;

他们return没有区别。作为个人选择,我选择第二个版本 - CTE,原因是可读性。但除此之外,子查询与 CTE - 它们的行为应该相同。

希望对您有所帮助

使用通用 Table 表达式 (CTE) 在必须重复内部代码时也很有用。这样您就可以在需要时调用 CTE 而不是重复代码。