ITPub博客

首页 > 数据库 > > 合并结果集(UNION)的介绍

合并结果集(UNION)的介绍

作者:GaussDB_数据库 时间:2020-03-02 15:03:45 0 删除 编辑

GaussDB 100提供UNION运算符,将多个查询块的结果集合并为一个结果集输出。

语法格式

select_statement UNION [ALL] select_subquery

使用方法

  • 每个查询块的查询列数目必须相同。

  • 每个查询块对应的查询列必须为相同数据类型或同一数据类型组,不同数据类型组或不支持组合的数据类型不允许执行UNION操作。

    数据类型的分组和合并规则如表1所示。

  • 关键字ALL的意思是保持所有重复数据,而没有ALL的情况下表示删除所有重复数据。

数值类型

NUMBER/ (DECIMAL)

  • 若合并的查询列数值类型相同,且其精度以及小数位数相同,则合并结果返回为原数值类型,且合并结果保留该精度和小数位。

  • 若合并的查询列数值类型不相同,则按照优先级返回优先级高的数值类型。优先级为:

    NUMBER>BINARY_DOUBLE>BINARY_BIGINT>BINARY_INTEGER

  • 若合并的查询列,数值类型的精度以及小数位数不同,则返回值默认不指定精度和小数位数。

BINARY_DOUBLE

BINARY_INTEGER

BINARY_BIGINT

字符串类型

CHAR(size [BYTE | CHAR])

  • 若合并的查询列数值类型相同,且长度(size)以及储存的类型相同,则合并结果返回为原数值类型,且合并结果长度(size)以及储存的类型与原类型相同。

  • 若合并的查询列数值类型不同,按照优先级返回优先级高的数值类型。优先级为:VARCHAR>CHAR。

  • 若合并的查询列数值类型不同,但储存类型相同时,合并结果返回值继承原储存类型,且长度(size)取查询列的最大值。

  • 若合并的查询列数值类型不同,且储存类型不同时,GaussDB 100默认字符类型转化率(CHAR_TO_BYTES_RATIO)的值为6,假设列A为(n1 char),列B为(n2 byte),计算x=n1×CHAR_TO_BYTES_RATIO。

    • 若x<=n2,合并结果返回类型的长度为n2,不带char属性。

    • 若x>n2,合并结果返回类型的长度取MAX(n1, n2),带char属性。

VARCHAR(size [BYTE | CHAR])

二进制类型

BINARY

  • 若合并的查询列数值类型不相同,则按照优先级返回优先级高的数值类型。优先级为:VARBINARY>BINARY

  • 合并返回值的长度(size),取两个查询列的最大值。

VARBINARY

RAW

RAW类型不能和BINARY、VARBINARY类型合并结果集。

日期类型

DATE

  • 日期类型的数据可以互相合并,优先级为:

    TIMESTAMP WITH TIME ZONE>TIMESTAMP WITH LOCAL TIME ZONE>TIMESTAMP>DATE

  • 合并查询返回值精度取查询列的最大值,DATE类型的精度按0计算。

TIMESTAMP

TIMESTAMP WITH LOCAL TIME ZONE

TIMESTAMP WITH TIME ZONE

时间间隔类型

INTERVAL YEAR TO MONTH

  • 不同的时间间隔类型不能合并结果集。

  • 同类型时间间隔类型,合并查询返回值精度取查询列的最大值。

INTERVAL DAY TO SECOND

布尔类型

BOOLEAN

-

LOB类型

CLOB

不同的LOB类型不能合并结果集。

表1 数据类型组

数据类型组

数据类型

合并规则及优先级

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959250/viewspace-3140073/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-01-06

  • 博文量
    2907
  • 访问量
    19228