文章来源:https://www.cnblogs.com/alex0702/p/10767005.html
语法:
select 字段
|常量
|表达式
|函数 【from 表】 【where 条件】 union 【all】
select 字段
|常量
|表达式
|函数 【from 表】 【where 条件】 union 【all】
select 字段
|常量
|表达式
|函数 【from 表】 【where 条件】 union 【all】
.....
select 字段
|常量
|表达式
|函数 【from 表】 【where 条件】
特点
1、多条查询语句的查询的列数必须是一致的
2、多条查询语句的查询的列的类型几乎相同
3、union代表去重,union all代表不去重
案例
UNION:查询部门编号>90或邮箱包含a的员工信息
SELECT * FROM employees
WHERE email
LIKE '%a%' OR department_id
>90;;
SELECT * FROM employees
WHERE email
LIKE '%a%'
UNION
SELECT * FROM employees
WHERE department_id
>90;
UNION ALL:查询中国用户中男性的信息以及外国用户中年男性的用户信息去掉重复记录重复记录是指查询中各个字段完全重复的记录,如下例,若 cname 一样但 id 号不一样算作不同记录。
SELECT id
,cname
FROM t_ca
WHERE csex
='男'
UNION ALL
SELECT t_id
,tname
FROM t_ua
WHERE tGender
='male';
UNION 子句中使用 ORDER BY
子句中使用 ORDER BY,即将 SELECT 子句的结果先排序,然后再把这些子句查询的结果进行集合。
在子句中使用 ORDER BY,由于优先级问题,需要将整个子句加圆括号(),且必须与 LIMIT 结合使用:
(SELECT aid
,title
FROM article
ORDER BY aid
DESC LIMIT 10)
UNION ALL
(SELECT bid
,title
FROM blog
ORDER BY bid
DESC LIMIT 10)
UNION 整句中使用 ORDER BY
如果想使用 ORDER BY 或 LIMIT 来对全部 UNION 结果进行分类或限制,则应对单个 SELECT 语句加圆括号,并把 ORDER BY 或 LIMIT 放到最后一个的后面。
(SELECT aid
,title
FROM article
)
UNION ALL
(SELECT bid
,title
FROM blog
)
ORDER BY aid
DESC
UNION ORDER BY 应用于别名
如果 SELECT 中使用到了字段别名,则 OEDER BY 必须引用别名:
(SELECT a
AS b
FROM table) UNION (SELECT ...) ORDER BY b
UNION LIMIT
在 MySQL UNION 中使用 LIMIT 用于限制返回的记录条数,如果对 SELECT 子句做限制,需要对 SELECT 添加圆括号:
(SELECT aid
,title
FROM article
LIMIT 2)
UNION ALL
(SELECT bid
,title
FROM blog
LIMIT 2)
该 SQL 会返回个 SELECT 语句的两条记录,如果不添加圆括号,则最后一个 LIMIT 2 会作用于整个 UNION 语句而一共返回 2 条记录同 ORDER BY 类似,当需要对整个 UNION 的结果进行 LIMIT 限制时,建议将各个 SELECT 语句用圆括号括起来以使语句更加清晰:
(SELECT aid
,title
FROM article
)
UNION ALL
(SELECT bid
,title
FROM blog
)
LIMIT 2