首页 > 数据库 > > 合并结果集(UNION)的介绍
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类型不能合并结果集。
数据类型组 | 数据类型 | 合并规则及优先级 |
|---|---|---|
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959250/viewspace-3140073/ ,如需转载,请注明出处,否则将追究法律责任。