SQL中Union和Union All

时间:2023-03-09 15:27:56
SQL中Union和Union All

工作中,看到大佬写的一段SQL,查询了五个表中的数据,最后求某个收入的总和,其中使用了Union All,因此在这里记录一下我从中学到的东西

先上语法

Union:   [ Select语句1 ]

Union

        [ Select语句2 ]

Union

...

Union All:   [ Select语句1 ]

Union All

[ Select语句2 ]

Union All

...

Union 和 Union All  都是用来将多个SELECT语句查询出的结果集进行合并,得到的是一个临时表,要对这个临时表进行操作,需要起别名

要注意的是,使用这两个操作符的时候,多个查询语句查出来的结果集应具有相同的列数,列的顺序也必须相同(这里,如果数据库表中的字段名不一致,可以对列起别名,使要合并的结果集的列名一致),同时列的数据类型也要相同

Union是讲SELECT语句查出来的结果集合并,并且将其中重复的值去除掉,只显示不同的值,如果要显示重复的值,就需要使用Union All

也就是说,Union会对查询出来的结果集进行去除重复值的操作,并且会按照字段的顺序进行排序,而Union All会将结果集直接全部显示且不会进行排序,这也就导致了Union All 的效率要比Union 好很多

使用Union 操作符时,子句中不可以使用order by,使用后执行会报错,如果逻辑上必须对查询语句进行排序,那么可以在SELECT查询语句中使用子查询来进行order by排序

所以,一般不要求去重的时候,合并结果集选择Union All 比较好

2019-02-12  修改

之前写到使用Union操作符时,子句不可以使用order by,这是不严谨的,应该是Union操作符之前的子句不可以使用order by

SQL中Union和Union All

order by子句在Union操作符之后,可以正常查出数据,并且是按照order by的排序方式展示数据

SQL中Union和Union All