SQL:union 和 union all

来源:互联网 发布:票乎 编辑:程序博客网 时间:2024/06/03 21:17
  1. ## 数据库表 ##
    使用Mysql 5.7版本进行验证。
    这里写图片描述
  2. ## sql查询 ##
    UNION是将多个结果连接在一起,需要注意保持连接的结果列的数量需要保持相同。UNION会以第一个的列的名称进行返回结果,在使用的时候需要多加注意,例如:
SELECT    grade,id,NAMEFROM    studentUNIONSELECT    id,NAME,gradeFROM    studentWHERE    id < 2===============结果==================grade        id        name------------------------------------10            1         Allen90            2         Lol50            3         meil89            4         lily1             Allen     10

首先UNION查询

SELECT    id,name,gradeFROM    studentUNIONSELECT    id,name,gradeFROM    student    ;===============结果==================id        name        grade------------------------------------1          Allen       102          Lol         903          meil        504          lily        89

使用UNION ALL

SELECT    id,name,gradeFROM    studentUNION ALLSELECT    id,name,gradeFROM    student;===============结果==================id        name        grade------------------------------------1          Allen       102          Lol         903          meil        504          lily        891          Allen       102          Lol         903          meil        504          lily        89

从上面可以看出,UNION和UNION ALL的区别在于对重复结果的处理。
再来试一试select不同的顺序是否对查询结果有什么影响

一、SELECT    id,name,gradeFROM    studentWHERE    id < 2UNION    SELECT        id,name,grade    FROM        studentWHERE   id > 1;===============结果==================id        name        grade------------------------------------1           Allen       102           Lol         903           meil        504           lily        89二、SELECT    id,NAME,gradeFROM    studentWHERE   id > 1UNIONSELECT    id,NAME,gradeFROM    studentWHERE    id < 2;===============结果==================id        name        grade------------------------------------2           Lol         903           meil        504           lily        891           Allen       10

结果是相同的,可见,sql语句的顺序是不影响结果的。但是两次结果的顺序却是不一样的。两次查询到的结果是第一条sql的查询结果在前,第二条的sql查询结果在后进行排序。

那么如何对结果进行自定义排序呢?
对结果可使用order by进行排序,但是order by需要在最后使用,在第一个SQL中使用,则会出现错误。

一、SELECT    id,NAME,gradeFROM    studentorder by id descUNIONSELECT    id,    NAME,    gradeFROM    studentWHERE    id < 2;===============结果==================[Err] 1221 - Incorrect usage of UNION and ORDER BY二、SELECT    id,NAME,gradeFROM    studentUNIONSELECT    id,NAME,gradeFROM    studentWHERE    id < 2order by id desc;===============结果==================id        name        grade------------------------------------4           lily        893           meil        502           Lol         901           Allen       10三、SELECT    id,NAME,gradeFROM    studentUNIONSELECT    id,NAME,gradeFROM    studentWHERE    id < 2===============结果==================id        name        grade------------------------------------1           Allen       102           Lol         903           meil        504           lily        89

UNION的自动排序规则暂未研究。