WithCoderWithCoderWithCoder

MySQL UNION连接两个以上的SELECT语句的结果组合到一个结果集合

    在MySQL中,UNION 操作符用于把来自多个 SELECT 语句的结果组合到一个结果集合中。

    语法格式:

SELECT ...

UNION [ALL | DISTINCT]

SELECT ...

[UNION [ALL | DISTINCT]

SELECT ...]

    每个SELECT语句的对应位置的被选择的列应具有相同的类型,例如,被第一个语句选择的第一列应和被其它语句选择的第一列具有相同的类型。在第一个SELECT语句中被使用的列名称也被用于结果的列名称。

    在使用UNION语句时,需要注意:

    1. UNION 语句:不适用关键字ALL时,所有返回的行都是唯一的,即结果集合中不包括重复数据,如同对整个结果集合使用DISTINCT

    2. UNION ALL 语句:如果指定了关键字ALL,则集合中包含所有匹配到的行,即结果集合可以用包括重复数据。

    另外,DISTINCT关键词是一个自选词,不起任何作用,但是根据SQL标准的要求,在语法中允许采用。(在MySQL中,DISTINCT代表一个共用体的默认工作性质。)

    举例1,使用UNION语句返回一个表中id等于1和name等于neil的结果集:   

SELECT id,NAME FROM tn_member WHERE id = 1
UNION
SELECT id,NAME FROM tn_member WHERE NAME = 'neil'

    如果您想使用ORDER BY或LIMIT子句来对全部UNION结果进行分类或限制,则应对单个地SELECT语句加圆括号,并把ORDER BY或LIMIT放到最后一个的后面。

    举例2  

(SELECT id,NAME FROM tn_member WHERE id = 1)
UNION
(SELECT id,NAME FROM tn_member WHERE NAME = 'neil')
ORDER BY id

    这种ORDER BY不能使用包括表名称(也就是,采用tbl_name.col_name格式的名称)列引用,可以在第一个SELECT语句中提供一个列别名,并在ORDER BY中使用该别名。

    另外,圆括号中用于单个SELECT语句的ORDER BY只有当与LIMIT结合后,才起作用。否则,ORDER BY被优化去除。

    举例3,计算表中id最小和最大的记录的结果集:   

(SELECT id,NAME FROM tn_member ORDER BY id LIMIT 1)
UNION
(SELECT id,NAME FROM tn_member ORDER BY id DESC LIMIT 1)

欢迎分享交流,转载请注明出处:WithCoder » MySQL UNION连接两个以上的SELECT语句的结果组合到一个结果集合