SQL 9 联合结果集 3. UNION ALL

我们想列出公司中所有员工(包括临时工)的姓名和年龄信息,那么可以执行下面的SQL语句:

SELECT FName, FAge FROM T_Employee

UNION SELECT FName, FAge FROM T_TempEmployee

执行结果:

+---------+------+
| fname   | fage |
+---------+------+
| Tom     |   25 |
| Jerry   |   28 |
| Potter  | NULL |
| Jane    |   23 |
| Tina    |   25 |
| Smith   |   28 |
| NULL    |   27 |
| Timmy   |   25 |
| Stone   |   35 |
| Sarani  |   32 |
| Yalaha  |   37 |
| Konkaya |   28 |
| Fotifa  |   45 |
| James   |   23 |
+---------+------+

 

仔细观察结果集,我们发现输出的结果和预想的是不一致的。在正式员工中有名为Tom、年龄为26,以及姓名为Tina、年龄为26,而临时工也有姓名为Tom、年龄26以及姓名为Tina、年龄为26的两名员工。也就是说正式员工和临时工中存在崇明和年龄重复的现象,但是在查询结果中却将重复的信息只保留了一条,也就是只有一个姓名为Tom、年龄为26的员工和一个姓名为Tina、年龄为26的员工。

这是因为默认情况下,UNION合并了两个查询结果集,其中完全重复的数据行被合并为一条。如果需要在联合结果集中返回所有记录而不管它们是否唯一,则需要在UNION后使用ALL,比如下面的SQL语句:

SELECT FName, FAge FROM T_Employee

UNION ALL SELECT FName, FAge FROM T_TempEmployee

+------+---------+
| fage | fname   |
+------+---------+
|   25 | Tom     |
|   28 | Jerry   |
| NULL | Potter  |
|   23 | Jane    |
|   25 | Tina    |
|   28 | Smith   |
|   27 | NULL    |
|   25 | Timmy   |
|   35 | Stone   |
|   32 | Sarani  |
|   25 | Tom     |
|   37 | Yalaha  |
|   25 | Tina    |
|   28 | Konkaya |
|   45 | Fotifa  |
|   23 | James   |
+------+---------+

 

 

 

你可能感兴趣的:(sql,null)