联合结果集的原则

联合结果集不必受被联合的多个结果集之间的关系限制,不过使用UNION仍然有两个基本的原则需要遵守:一是每个结果集必须有相同的列数;二是每个结果集的列必须类型相容。

首先看第一个原则,每个结果集必须有相同的列数,两个不同列数的结果集是不能联合在一起的。比如下面的SQL语句是错误的:


SELECT FNumber,FName,FAge,FDepartment FROM T_Employee

UNION

SELECT FIdCardNumber,FName,FAge FROM T_TempEmployee 

执行以后数据库系统会报出如下的错误信息:

使用UNION、INTERSECT 或EXCEPT 运算符合并的所有查询必须在其目标列表中有相同数目的表达式。

因为第一个结果集返回了4列数据,而第二个结果集则返回了3列数据,数据库系统并不会用空值将第二个结果集补足为4列。如果需要将未知列补足为一个默认值,那么可以使用常量字段,比如下面的SQL语句就将第二个结果集的与FDepartment对应的字段值设定为“临时工,不属于任何一个部门”:


SELECT FNumber,FName,FAge,FDepartment FROM T_Employee

UNION

SELECT FIdCardNumber,FName,FAge,"临时工,不属于任何一个部门" FROM T_TempEmployee 

联合结果集的第二个原则是:每个结果集的列必须类型相容,也就是说结果集的每个对应列的数据类型必须相同或者能够转换为同一种数据类型。比如下面的SQL语句在MYSQL中可以正确的执行:


SELECT FIdCardNumber,FAge,FName FROM T_TempEmployee

UNION

SELECT FNumber,FName,FAge FROM T_Employee 

可以看到MYSQL将FAge转换为了文本类型,以便于与FName字段值匹配。不过这句SQL语句在MSSQLServer、Oracle、DB2中执行则会报出类似如下的错误信息:

表达式必须具有与对应表达式相同的数据类型。

因为这些数据库系统不会像MYSQL那样进行默认的数据类型转换。由于不同数据库系统中数据类型转换规则是各不相同的,因此如果开发的应用程序要考虑跨多数据库移植的话最好保证结果集的每个对应列的数据类型完全相同。

转载于:https://www.cnblogs.com/yuyu666/p/9823643.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值