使用 UNION 的查询中的析取词之一的正确术语是啥?
Posted
技术标签:
【中文标题】使用 UNION 的查询中的析取词之一的正确术语是啥?【英文标题】:What is the proper term for one of the disjuncts in a query using UNION?使用 UNION 的查询中的析取词之一的正确术语是什么? 【发布时间】:2020-11-21 17:50:42 【问题描述】:完成句子:在查询中
SELECT 0 UNION ALL SELECT 1;
子选择 SELECT 0
和 SELECT 1
被正确地称为 UNION
的 ___________。
我不是在寻找你对什么是好名字的意见 - 我希望你通过引用某种权威来源来支持你的答案。
【问题讨论】:
标准 SQL 称它们为<query expression body>
dnoeth,为什么不为此添加一个指向源的链接并将其作为答案发布
从答案中可以看出,这些部件似乎不存在常用名称。我也不知道。由于这些部分是查询,Oracle 将它们称为“组件查询”(Mureinik 的回答)的想法似乎是合适的。不过,我们更可能参考它们的结果,而不是命名这两个子查询。所以,Jon 关于“结果集”的建议是好的,但对于如何调用 sub-selects 的问题并不是完美的答案。
【参考方案1】:
如果我正确理解标准 SQL 文档,这似乎被称为 <query term>
。
SQL:20xx 网上好难找,Itzik Ben-Gan 在Fundamentals of table expressions中显示了相关部分
7.17 <query expression>
Function
Specify a table.
Format
<query expression> ::=
[ <with clause> ] <query expression body>
[ <order by clause> ] [ <result offset clause> ] [ <fetch first clause> ]
<with clause> ::=
WITH [ RECURSIVE ] <with list>
<with list> ::=
<with list element> [ <comma> <with list element> … ]
<with list element> ::=
<query name> [ <left paren> <with column list> <right paren> ]
AS <table subquery> [ <search or cycle clause> ]
<with column list> ::=
<column name list>
<query expression body> ::=
<query term>
| <query expression body> UNION [ ALL | DISTINCT ]
[ <corresponding spec> ] <query term>
| <query expression body> EXCEPT [ ALL | DISTINCT ]
[ <corresponding spec> ] <query term>
<query term> ::=
<query primary>
| <query term> INTERSECT [ ALL | DISTINCT ]
[ <corresponding spec> ] <query primary>
<query primary> ::=
<simple table>
| <left paren> <query expression body>
[ <order by clause> ] [ <result offset clause> ] [ <fetch first clause> ]
<right paren>
<simple table> ::=
<query specification>
| <table value constructor>
| <explicit table>
<explicit table> ::=
TABLE <table or query name>
<corresponding spec> ::=
CORRESPONDING [ BY <left paren> <corresponding column list> <right paren> ]
<corresponding column list> ::=
<column name list>
<order by clause> ::=
ORDER BY <sort specification list>
<result offset clause> ::=
OFFSET <offset row count> ROW | ROWS
<fetch first clause> ::=
FETCH FIRST | NEXT [ <fetch first quantity> ] ROW | ROWS ONLY | WITH TIES
<fetch first quantity> ::=
<fetch first row count>
| <fetch first percentage>
<offset row count> ::=
<simple value specification>
<fetch first row count> ::=
<simple value specification>
<fetch first percentage> ::=
<simple value specification> PERCENT
【讨论】:
在您引用的定义中,“查询表达式主体”似乎是用于整个表达式的术语,即“SELECT 0 UNION SELECT 1”。 “查询词”是个人选择之一的词。【参考方案2】:Oracle's documentation 将它们称为“组件查询”。
【讨论】:
【参考方案3】:我会说“结果集”。
UNION 连接来自两个查询的结果集。但是 UNION 确实 不要从两个表中收集的列创建单独的行。
从这里: https://docs.microsoft.com/en-us/sql/t-sql/language-elements/set-operators-union-transact-sql?view=sql-server-ver15
【讨论】:
以上是关于使用 UNION 的查询中的析取词之一的正确术语是啥?的主要内容,如果未能解决你的问题,请参考以下文章
数理逻辑命题逻辑的等值演算与推理演算 ( 命题逻辑 | 等值演算 | 主合取 ( 析取 ) 范式 | 推理演算 ) ★★