CROSS JOIN - SELECT UNION ALL 代码如何工作?

How does the CROSS JOIN - SELECT UNION ALL code work?

我想复制 table 中的行,所以我发现

select column_name
from table_name
cross join (select 1 as n union all select 2)n;

有效,但我不明白它是如何工作的。所以我玩弄它以了解它是如何工作的。

我不明白的是

why does the code work even when the n and m are different and/or same and even when no alias is inputted?

您的 select 语句未引用别名为 n 的派生 table 中的任何列,因此为派生 table 的列提供的别名无关紧要 - 你给它起什么名字并不重要。

一旦您的声明变成 select column_name, n... or select * ,那么它就会很重要,或者如果它被用作 view 定义的一部分。

what is the point of the alias in the () part of the code?

基本上和上面一样,只要你想 return 结果集中的列,它(显然)很重要;在这种情况下没有定义的列别名是合法的,因为它不需要派生的 table 的交叉连接按预期运行,但是如果这是 view 的一部分或 CTE 这很重要,因为列需要有别名。

上面派生的 table(即 cross-joined)有其 自己的 别名,在此示例中也 n 但它与或需要匹配用作派生 table 的一部分的列别名。 SQL 语法 需要 派生的 table - 即括号中的任何 SQL 语句 - 具有别名。