一、联合结果集
1、执行以下的代码:
CREATE TABLE T_TempEmployee (FIdCardNumber VARCHAR(20),FName VARCHAR(20),FAge INT, PRIMARY KEY (FIdCardNumber));
INSERT INTO T_TempEmployee(FIdCardNumber,FName,FAge) VALUES('1234567890121','Sarani',33);
INSERT INTO T_TempEmployee(FIdCardNumber,FName,FAge) VALUES('1234567890122','Tom',26);
INSERT INTO T_TempEmployee(FIdCardNumber,FName,FAge) VALUES('1234567890123','Yalaha',38);
INSERT INTO T_TempEmployee(FIdCardNumber,FName,FAge) VALUES('1234567890124','Tina',26);
INSERT INTO T_TempEmployee(FIdCardNumber,FName,FAge) VALUES('1234567890125','Konkaya',29);
INSERT INTO T_TempEmployee(FIdCardNumber,FName,FAge) VALUES('1234567890126','Fotifa',46);
2、简单的结果集联合:
SELECT FNumber,FName,FAge FROM T_Employee UNION SELECT FIdCardNumber,FName,FAge FROM T_TempEmployee
3、基本的原则:每个结果集必须有相同的列数;每个结果集的列必须类型相容。
SELECT FNumber,FName,FAge,FDepartment FROM T_Employee UNION SELECT FIdCardNumber,FName,FAge,‘临时工,无部门' FROM T_TempEmployee
二、Union all
4、SELECT FName FROM T_Employee UNION SELECT FName FROM T_TempEmployee
说明:UNION合并两个查询结果集,并且将其中完全重复的数据行合并为一条。
5、SELECT FName FROM T_Employee UNION ALL SELECT FName FROM T_TempEmployee
说明:Union因为要进行重复值扫描,所以效率低,因此如果不是确定要合并重复行,那么就用UNION ALL 。
6、UNION和UNION ALL的区别:
(1)UNION 合并重复行。合并结果集,并去除重复项。
(2)UNION ALL 不合并重复行(结果集包含所有行)。合并结果集,不去除重复项。
7、案例1:要求查询员工的最低年龄和最高年龄,临时工和正式员工要分别查询。
SELECT '正式员工最高年龄',MAX(FAge) FROM T_EmployeeUNION ALLSELECT '正式员工最低年龄',MIN(FAge) FROM T_EmployeeUNION ALLSELECT '临时工最高年龄',MAX(FAge) FROM T_TempEmployeeUNION ALLSELECT '临时工最低年龄',MIN(FAge) FROM T_TempEmployee
8、案例2:查询每位正式员工的信息,包括工号、工资,并且在最后一行加上所有员工工资额合计。
SELECT FNumber,FSalary FROM T_EmployeeUNION ALLSELECT '工资合计',SUM(FSalary) FROM T_Employee