SQL数据库表union和unionall的使用和介绍

## 数据库表 ##

使用Mysql 5.7版本进行验证。

## sql查询 ##

UNION是将多个结果连接在一起,需要注意保持连接的结果列的数量需要保持相同。UNION会以第一个的列的名称进行返回结果,在使用的时候需要多加注意,例如:

SELECT
    grade,id,NAME
FROM
    student
UNION
SELECT
    id,NAME,grade
FROM
    student
WHERE
    id < 2
===============结果==================
grade        id        name
------------------------------------
10            1         Allen
90            2         Lol
50            3         meil
89            4         lily
1             Allen     10

首先UNION查询

SELECT
    id,name,grade
FROM
    student
UNION
SELECT
    id,name,grade
FROM
    student
    ;
===============结果==================
id        name        grade
------------------------------------
1          Allen       10
2          Lol         90
3          meil        50
4          lily        89

使用UNION ALL

SELECT
    id,name,grade
FROM
    student
UNION ALL
SELECT
    id,name,grade
FROM
    student;
===============结果==================
id        name        grade
------------------------------------
1          Allen       10
2          Lol         90
3          meil        50
4          lily        89
1          Allen       10
2          Lol         90
3          meil        50
4          lily        89

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

一、
SELECT
    id,name,grade
FROM
    student
WHERE
    id < 2
UNION
    SELECT
        id,name,grade
    FROM
        student
WHERE   id > 1;
===============结果==================
id        name        grade
------------------------------------
1           Allen       10
2           Lol         90
3           meil        50
4           lily        89
二、
SELECT
    id,NAME,grade
FROM
    student
WHERE   id > 1
UNION
SELECT
    id,NAME,grade
FROM
    student
WHERE
    id < 2;
===============结果==================
id        name        grade
------------------------------------
2           Lol         90
3           meil        50
4           lily        89
1           Allen       10

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

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

一、
SELECT
    id,NAME,grade
FROM
    student
order by id desc
UNION
SELECT
    id,
    NAME,
    grade
FROM
    student
WHERE
    id < 2;
===============结果==================
[Err] 1221 - Incorrect usage of UNION and ORDER BY
二、
SELECT
    id,NAME,grade
FROM
    student
UNION
SELECT
    id,NAME,grade
FROM
    student
WHERE
    id < 2
order by id desc;
===============结果==================
id        name        grade
------------------------------------
4           lily        89
3           meil        50
2           Lol         90
1           Allen       10
三、
SELECT
    id,NAME,grade
FROM
    student
UNION
SELECT
    id,NAME,grade
FROM
    student
WHERE
    id < 2
===============结果==================
id        name        grade
------------------------------------
1           Allen       10
2           Lol         90
3           meil        50
4           lily        89

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

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐