union和unionall的使用



关于union的使用
Union,对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union All,对两个结果集进行并集操作,包括重复行,不进行排序;
这个是网上大多的结论,我自己用mysql尝试了一下。
首先是原料的两句sql
1
mysql> select * from ja2;

结果如下:
+——+———+———-+
| id | name | score |
+——+———+———-+
| 4 | 4 | 4 |
| 5 | 5 | 5 |
| 6 | 6 | 6 |
| 10 | 4 | 2 |
+——+———+———-+
4 rows in set (0.00 sec)
1
mysql> select * from stu;

结果如下:
+——+———+———-+
| id | name | score |
+——+———+———-+
| 1 | 1 | 1 |
| 2 | 2 | 2 |
| 3 | 3 | 3 |
+——+———+———-+
3 rows in set (0.01 sec)
1
2
3
mysql> select * from stu
-> union
-> select * from ja2

结果很显而易见:
+——+———+———-+
| id | name | score |
+——+———+———-+
| 1 | 1 | 1 |
| 2 | 2 | 2 |
| 3 | 3 | 3 |
| 4 | 4 | 4 |
| 5 | 5 | 5 |
| 6 | 6 | 6 |
| 10 | 4 | 2 |
+——+———+———-+
7 rows in set (0.00 sec)

接下去我对这个对等的结果很好奇,是不是name对应的score,那么返回的是什么

1
mysql> select name from stu union all select score from ja2;

+———+
| name |
+———+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 2 |
+———+
这个是最后的结果,因为union会去重,最后的2会看不见,所以我就使用来unionall。虽然最终的结果是name,但是最后一个2的确是score上面的内容。