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;
有效,但我不明白它是如何工作的。所以我玩弄它以了解它是如何工作的。
I added/deleted 列,但不必对代码的 cross join
或 union all
部分进行任何更改。所以我明白代码会重复所有的列,不管有多少。
我从 ()
中的代码中删除了 as n
,它仍然有效。我将 ()
中的 n
替换为 m
,它仍然有效。我基本上可以在代码的 ()
部分编写字母、数字和下划线的任意组合作为每个 select
的别名,然后在 )
之外键入更多随机字母、数字和下划线它仍然有效。
我了解到代码重复行的次数为 select union all
。
我不明白的是
- 为什么即使
n
和 m
不同 and/or 即使没有输入别名,代码也能正常工作?
- 代码
()
部分的别名有什么意义?
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 语句 - 具有别名。
我想复制 table 中的行,所以我发现
select column_name
from table_name
cross join (select 1 as n union all select 2)n;
有效,但我不明白它是如何工作的。所以我玩弄它以了解它是如何工作的。
I added/deleted 列,但不必对代码的
cross join
或union all
部分进行任何更改。所以我明白代码会重复所有的列,不管有多少。我从
()
中的代码中删除了as n
,它仍然有效。我将()
中的n
替换为m
,它仍然有效。我基本上可以在代码的()
部分编写字母、数字和下划线的任意组合作为每个select
的别名,然后在)
之外键入更多随机字母、数字和下划线它仍然有效。我了解到代码重复行的次数为
select union all
。
我不明白的是
- 为什么即使
n
和m
不同 and/or 即使没有输入别名,代码也能正常工作? - 代码
()
部分的别名有什么意义?
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 语句 - 具有别名。