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

  

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

  

posted @ 2018-12-11 13:45  冬天从来不怕冷  阅读(283)  评论(0编辑  收藏  举报