欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-12-01 15:42:59
## 数据库表 ## 使用Mysql 5.7版本进行验证。 ## sql查询 ## UNION是将多个结果连接在一起,需要注意保持连接的结果列的数量需要保持相同。UNIO...

## 数据库表 ##

使用Mysql 5.7版本进行验证。

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

## 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的自动排序规则暂未研究。