使用 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 0SELECT 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 的查询中的析取词之一的正确术语是啥?的主要内容,如果未能解决你的问题,请参考以下文章

数理逻辑命题逻辑的等值演算与推理演算 ( 命题逻辑 | 等值演算 | 主合取 ( 析取 ) 范式 | 推理演算 ) ★★

Elasticsearch:从聚合中的存储桶访问值

Prolog:模拟析取事实

SQL UNION - 添加源

第 6 章 认知吝啬鬼

数据库中常用术语: