SAP HANA Union & Union All: Operator 示例

⚡ 智能摘要

SAP HANA Operator 用于在 SQL 中执行计算、值比较或赋值操作。共有六大类运算符:一元和二元运算符、算术运算符、字符串运算符、比较运算符、逻辑运算符以及集合运算符(例如 UNION 和 INTERSECT)。

  • 一元和二元: 一元运算符接受一个操作数,二元运算符接受两个操作数。
  • 🧮 算术: 加法,子trac对数值操作数进行运算、乘法和除法。
  • 🔗 字符串连接: 两条竖线将字符串、表达式或常量连接成一个值。
  • 比较: 等于、大于、小于及其组合会返回用于筛选的真值。
  • 🔀 逻辑: AND、OR 和 NOT 用于在 WHERE 子句中组合条件。
  • 🧩 米 Opera目的: UNION 删除重复项,UNION ALL 保留重复项,INTERSECT 返回共同的行,EXCEPT 子句tracTS。
  • 📊 示例: 两张具有相同值的表格展示了每个集合运算符的不同输出。

SAP HANA UNION 和 UNION ALL 运营商

SAP HANA Operator 可用于计算、值比较或分配值。

SAP HANA Opera职权范围

  • 一元和二元 Opera器
  • 算术 Opera器
  • 串 Opera职权范围
  • 对比 Opera器
  • 合乎逻辑 Opera器
  • 米 Opera器

每个运算符都会返回一个值,因此它们可以相互嵌套。它们的求值顺序由优先级决定,具体说明请参见各个运算符族的介绍。

一元和二元 Opera器

Opera器 操作 描述
一元 一元运算符适用于一个操作数 一元加号运算符(+) 一元否定运算符(-) 逻辑否定(NOT)
二进制 二进制 Operator 适用于两个操作数 乘法运算符(*,/) 加法运算符(+,-) 比较运算符(=,!=,<,>,<=,>=) 逻辑运算符(AND,OR)

算术 Opera器

  • 加法 (+)
  • 小组traction (-)
  • 乘法 ( * )
  • 分配 ( / )

串 Opera器

一个字符串 Operator 是一个连接运算符,它将两个项目(例如字符串,表达式或常量)组合为一个。

使用两个竖线“||”作为连接运算符。

对比 Opera器

比较运算符用于比较两个操作数。以下是比较运算符的列表 Opera托尔

  • 等于(=)
  • 大于 ( > )
  • Less 比 ( < )
  • 大于或等于(>=)
  • Less 小于或等于(<=)
  • 不等于(!=,<>)

合乎逻辑 Opera器

搜索条件中使用逻辑运算符。

例如 WHERE 条件1 AND / OR / NOT 条件2

以下是逻辑运算符的列表 -

  • AND – (例如 WHERE 条件 1 AND 条件 2)
    如果条件 1 和条件 2 都为真,则组合条件为真,否则为假。
  • 或者 – (例如 WHERE 条件 1 或 条件 2)
    如果条件 1 或条件 2 为真,则组合条件为真,如果两个条件都为假,则组合条件为假。
  • 不 – (例如 WHERE NOT 条件)
    如果条件为假,则非条件为真。

米 Opera职权范围

  • UNION – 将两个或多个 SELECT 语句或查询合并在一起,不包含重复项。
  • UNION ALL – 合并两个或多个 select 语句或查询,包括所有重复行。
  • INTERSECT – 将两个或多个 SELECT 语句或查询合并,并返回所有共同的行。
  • EXCEPT – 获取第一个查询的输出,并删除第二个查询选择的行。

例如 我有两个表(表 1、表 2),其中一些值是共同的。

米 Opera托尔斯 SAP HANA

我们对这两个表使用集合运算符(Union、Union ALL、Intersect、Except) SQL 如下 -

创建表 1- SQL 脚本

CREATE COLUMN TABLE DHK_SCHEMA.TABLE1
( ELEMENT CHAR(1),
  PRIMARY KEY (ELEMENT)
);
INSERT INTO DHK_SCHEMA.TABLE1 VALUES ('P');
INSERT INTO DHK_SCHEMA.TABLE1 VALUES ('Q');
INSERT INTO DHK_SCHEMA.TABLE1 VALUES ('R');
INSERT INTO DHK_SCHEMA.TABLE1 VALUES ('S');
INSERT INTO DHK_SCHEMA.TABLE1 VALUES ('T');

创建表 2- SQL 脚本

CREATE COLUMN TABLE DHK_SCHEMA.TABLE2
( ELEMENT CHAR(1),
  PRIMARY KEY (ELEMENT)
);
INSERT INTO DHK_SCHEMA.TABLE2 VALUES ('S');
INSERT INTO DHK_SCHEMA.TABLE2 VALUES ('T');
INSERT INTO DHK_SCHEMA.TABLE2 VALUES ('U');
INSERT INTO DHK_SCHEMA.TABLE2 VALUES ('V');
INSERT INTO DHK_SCHEMA.TABLE2 VALUES ('W');

注意::此处“DHK_SCHEMA”是架构名称,用户可以在 SQL 因此。

米 Opera示例如下

Opera器 SQL查询 输出 使用
UNION 选择 *

(
选择 ELEMENT
DHK_SCHEMA.TABLE1
UNION
选择 ELEMENT
DHK_SCHEMA.TABLE2
)
ORDER BY 元素;

UNION 集合运算符输出

合并两个或多个查询的结果且不重复。
UNION ALL 选择 *

(
选择 ELEMENT
DHK_SCHEMA.TABLE1
UNION ALL
选择 ELEMENT
DHK_SCHEMA.TABLE2
)
ORDER BY 元素;

UNION ALL 集合运算符输出

将两个或多个查询的结果全部重复并合并。
相交 选择 *

(
选择 ELEMENT
DHK_SCHEMA.TABLE1
相交
选择 ELEMENT
DHK_SCHEMA.TABLE2
)
ORDER BY 元素;

INTERSECT 集运算符输出

将两个或多个具有所有共同行的查询的结果合并起来。
选择 *

(
选择 ELEMENT
DHK_SCHEMA.TABLE1

选择 ELEMENT
DHK_SCHEMA.TABLE2
)
ORDER BY 元素;

除了设置运算符输出

获取第一个查询的输出并删除第二个查询选择的行

米 Opera规则和要求

集合运算符看似简单,但却很容易拒绝查询,因为它们比较的是整个结果集,而不是单个值。它们遵循四条规则。

  1. 列数必须匹配。 两条 SELECT 语句必须返回相同数量的列。如果列数不匹配,则立即失败,并且错误消息会指出位置而不是列名。
  2. 数据类型必须兼容。 第一个查询的第一列与第二个查询的第一列进行匹配,以此类推,匹配依据是位置而非名称。兼容的数值类型会自动转换;字符列与日期类型的匹配则不会转换。
  3. 列名来自第一个查询。 无论第二个语句如何命名其列,输出结果都会忽略它们,这会让第一次阅读 UNION 结果的人感到惊讶。
  4. ORDER BY 语句应用于整个结果集。 它应该放在最后,在最后一个 SELECT 语句之后,这也是为什么上面的示例将 union 语句包装在外部 SELECT 语句中的原因。

UNION 和 UNION ALL 之间的性能差异值得注意。UNION 必须对合并结果进行排序或哈希处理以去除重复项,而 UNION ALL 则只需追加即可。在不允许或可以接受重复项的情况下,UNION ALL 在大型表上的速度明显更快。这些表中使用的列定义将在后续章节中介绍。 SAP HANA 数据类型.

Opera优先权 SAP HANA SQL

当多个运算符出现在同一个表达式中时,优先级决定了哪个运算符先被计算。如果优先级设置错误,查询虽然能够正常运行,但会返回错误的行,这比语法错误危险得多。

下单 运营商 类别
1 () 括号内的内容总是最先被评估。
2 + –(单个操作数) 一元加号和否定
3 * / 乘法与除法
4 + – || 加法,子trac连接,串联
5 = != < > <= >= 对比
6 不是 逻辑否定
7 AND 逻辑连词
8 OR 逻辑析取

经典的陷阱位于第 7 行和第 8 行。因为 AND 比 OR 的结合力更强,所以条件语句更容易出错。 WHERE region = 'EAST' OR region = 'WEST' AND status = 'OPEN' 读作 东,或者西,都是开放的。无论状态如何,都会返回所有东部行。在两个区域测试周围添加括号可以解决这个问题。

💡提示: 即使优先级顺序已经能够给出预期结果,也要在每个混合使用 AND 和 OR 条件的地方加上括号。这样查询语句就能自解释,并且便于其他开发人员后续修改。

日常语句语法已在以下部分中介绍: SAP HANA SQL 教程以及更广泛的平台 SAP HANA教程 系列丛书中。

常见问题

UNION ALL 函数仅将结果合并,而 UNION 函数则必须额外删除重复项。当输出中不允许或不能出现重复项时,请使用 UNION ALL 函数。

是的, SAP HANA 会隐式转换该数字。ping 使用 TO_VARCHAR 仍然是更好的做法,因为这样格式就由您控制,而不是会话默认值。

是的。人工智能用简单的语言重述了混合了“与”和“或”条件的逻辑,这立即揭示了该组是否……ping 首先匹配意图,然后提出修正该意图的括号。

是的。INTERSECT 和 EXCEPT 语句通常可以重写为 INNER JOIN 或 NOT EXISTS 子句,这样性能会更好。在采用重写方案之前,请先比较执行计划。

将任何值与 NULL 进行比较都会返回 unknown 而不是 true 或 false,因此该行会被过滤掉。请使用 IS NULL 和 IS NOT NULL 代替等于运算符。

总结一下这篇文章: