MySQL学习-- UNION与UNION ALL
UNION用于把来自许多SELECT语句的结果组合到一个结果集合中,也叫联合查询。
|
1
2
3
4
5
|
SELECT ...UNION [ALL | DISTINCT]SELECT ...[UNION [ALL | DISTINCT]SELECT ...] |
在多个 SELECT 语句中,第一个 SELECT 语句中被使用的字段名称将被用于结果的字段名称。
当使用 UNION 时,MySQL 会把结果集中重复的记录删掉,而使用 UNION ALL ,MySQL 会把所有的记录返回,且效率高于 UNION。
数据准备
student表
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
-- ------------------------------ Table structure for `student`-- ----------------------------DROP TABLE IF EXISTS `student`;CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(10) DEFAULT NULL, `age` tinyint(4) DEFAULT NULL, `classId` int(11) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;-- ------------------------------ Records of student-- ----------------------------INSERT INTO `student` VALUES ('1', 's1', '20', '1');INSERT INTO `student` VALUES ('2', 's2', '22', '1');INSERT INTO `student` VALUES ('3', 's3', '22', '2');INSERT INTO `student` VALUES ('4', 's4', '25', '2'); |
teacher表
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
-- ------------------------------ Table structure for `teacher`-- ----------------------------DROP TABLE IF EXISTS `teacher`;CREATE TABLE `teacher` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(10) DEFAULT NULL, `age` tinyint(4) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;-- ------------------------------ Records of teacher-- ----------------------------INSERT INTO `teacher` VALUES ('1', 't1', '36');INSERT INTO `teacher` VALUES ('2', 't2', '33');INSERT INTO `teacher` VALUES ('3', 's3', '22'); |
查询数据如下
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
mysql> SELECT * FROM student;+----+------+-----+---------+| id | name | age | classId |+----+------+-----+---------+| 1 | s1 | 20 | 1 || 2 | s2 | 22 | 1 || 3 | s3 | 22 | 2 || 4 | s4 | 25 | 2 |+----+------+-----+---------+4 rows in setmysql> SELECT * FROM teacher;+----+------+-----+| id | name | age |+----+------+-----+| 1 | t1 | 36 || 2 | t2 | 33 || 3 | s3 | 22 |+----+------+-----+3 rows in set |
使用 UNION的结果
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
mysql> SELECT id, name, age FROM student -> UNION -- 与UNION DISTINCT相同 -> SELECT id, name, age FROM teacher;+----+------+-----+| id | name | age |+----+------+-----+| 1 | s1 | 20 || 2 | s2 | 22 || 3 | s3 | 22 || 4 | s4 | 25 || 1 | t1 | 36 || 2 | t2 | 33 |+----+------+-----+6 rows in set |
使用 UNION ALL的结果
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
mysql> SELECT id, name, age FROM student -> UNION ALL -> SELECT id, name, age FROM teacher;+----+------+-----+| id | name | age |+----+------+-----+| 1 | s1 | 20 || 2 | s2 | 22 || 3 | s3 | 22 || 4 | s4 | 25 || 1 | t1 | 36 || 2 | t2 | 33 || 3 | s3 | 22 |+----+------+-----+7 rows in set |
其实联合查询跟字段的类型无关,只要求每个SELECT查询的字段数一样,能对应即可,如
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
mysql> SELECT id, name, age FROM student -- 这里可以看出第一个SELECT语句中的字段名称被用作最后结果的字段名 -> UNION -> SELECT age, name, id FROM teacher;+----+------+-----+| id | name | age |+----+------+-----+| 1 | s1 | 20 || 2 | s2 | 22 || 3 | s3 | 22 || 4 | s4 | 25 || 36 | t1 | 1 || 33 | t2 | 2 || 22 | s3 | 3 |+----+------+-----+7 rows in set |
在联合查询中,当使用ORDER BY的时候,需要对SELECT语句添加括号,并且与LIMIT结合使用才生效,如
|
1
2
3
4
5
6
7
8
9
10
11
12
|
mysql> (SELECT classId, id, name, age FROM student WHERE classId = 1 ORDER BY age DESC) -> UNION -> (SELECT classId, id, name, age FROM student WHERE classId = 2 ORDER BY age);+---------+----+------+-----+| classId | id | name | age |+---------+----+------+-----+| 1 | 1 | s1 | 20 || 1 | 2 | s2 | 22 || 2 | 3 | s3 | 22 || 2 | 4 | s4 | 25 |+---------+----+------+-----+4 rows in set |
此时classId为1的学生并没有按照年龄进行降序,结合LIMIT后
|
1
2
3
4
5
6
7
8
9
10
11
12
|
mysql> (SELECT classId, id, name, age FROM student WHERE classId = 1 ORDER BY age DESC LIMIT 2) -> UNION -> (SELECT classId, id, name, age FROM student WHERE classId = 2 ORDER BY age);+---------+----+------+-----+| classId | id | name | age |+---------+----+------+-----+| 1 | 2 | s2 | 22 || 1 | 1 | s1 | 20 || 2 | 3 | s3 | 22 || 2 | 4 | s4 | 25 |+---------+----+------+-----+4 rows in set |
MySQL学习-- UNION与UNION ALL的更多相关文章
- 【转】Mysql联合查询union和union all的使用介绍
Mysql的联合查询命令UNION和UNION ALL,总结了使用语法和注意事项,以及学习例子和项目例子,需要的朋友可以参考下 一.UNION和UNION ALL的作用和语法 UNION 用于合... ...
- MySQL UNION 与 UNION ALL 语法与用法
MySQL UNION 语法 MySQL UNION 用于把来自多个 SELECT 语句的结果组合到一个结果集合中.语法为: SELECT column,... FROM table1 UNION [ ...
- MySQL中UNION和UNION ALL的使用
在数据库中,UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同. MySQL中的UNION UNION在进行表链接后会筛选掉重复的记录,所以在表链接后 ...
- MySQL全连接(Full Join)实现,union和union all用法
MySQL本身不支持你所说的full join(全连接),但可以通过union来实现 ,下面是一个简单测试,可以看看: mysql> CREATE TABLE a(id int,name cha ...
- Mysql联合查询UNION和UNION ALL的使用介绍
UNION和UNION ALL的作用和语法 UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行.UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相 ...
- mysql union 与 union all 语法及用法
1.mysql union 语法 mysql union 用于把来自多个select 语句的结果组合到一个结果集合中.语法为: select column,......from tabl ...
- MySQL的or/in/union与索引优化
转载自:MySQL的or/in/union与索引优化 https://blog.csdn.net/zhangweiwei2020/article/details/80005590 假设订单业务表结构为 ...
- 【连接查询】mySql多表连接查询与union与union all用法
1.准备两个表 表a: 结构: mysql> desc a; +-------+-------------+------+-----+---------+-------+ | Field | T ...
- MySQL 常用语法 之 UNION与UNION ALL
下面讲一下mySql中的union和union all 的功能以及区别 A union B 是将表A的数据和表B的数据连接成一张表,前提是查询的两张表的列数一定要一样否则出错. A union all ...
- Mysql: 图解 inner join、left join、right join、full outer join、union、union all的区别
转载来源 对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚. ...
随机推荐
- js 实现横向轮播效果
参考:https://www.cnblogs.com/LIUYANZUO/p/5679753.html html: <!DOCTYPE html> <html> <hea ...
- apache+flask部署
wsgi方式 1.安装apache 1.解压httpd并进行安装 # tar zxvf httpd-2.2.15.tar.gz # cd httpd-2.2.15 # ./configure - ...
- [转]TabControl Style in WPF
一般 我们在使用TabControl时,需要添加多个tab页,然后把不需要的tab页通过鼠标右键点击ContextMenu菜单的形式进行关闭,下面的代码是直接在tab页上面添加按钮事件,直接点击关闭按 ...
- Web API 接口说明文档
1.采用 Web API Help Page 显示效果 2.swaggerui 创建文档接口 效果图 3.swagger ui 安装配置 nuget 安装 2.设置xml文件 3.配置根路径 预览sw ...
- HTML5 drag拖动事件
参考链接:https://segmentfault.com/a/1190000013606983 例子: <!DOCTYPE HTML> <html> <head> ...
- PHP7中标量类型declare的用法详解
这篇文章主要介绍了PHP7标量类型declare用法,结合实例形式分析了PHP7中标量类型declare的功能.特性与相关使用技巧,需要的朋友可以参考下 本文实例讲述了PHP7标量类型declare用 ...
- CentOS 6.5 MySQL安装
yum search mysql #查看mysql包 yum -y install mysql-server #安装mysql,注意是mysql-server iptables -I INPUT -p ...
- CCS开发指南
第一章 CCS概述 1 1.1 CCS概述 1 1.2 代码生成工具 3 1.3 CCS集成开发环境 5 1.3.1 编辑源程序 5 1.3.2创建应用程序6 1.3.3 调试应用程序 6 1.4 ...
- Flask中cookie和session设置与csrf原理攻防
Flask之操作cookie app.py from flask import Flask, request, Response app = Flask(__name__) @app.route('/ ...
- C++ 静态绑定与动态绑定------绝不重新定义继承而来的缺省参数
在了解静态绑定和动态绑定之前,先了解什么是对象的静态类型,什么是对象的动态类型. 对象的静态类型:对象在声明时采用的类型.是在编译器决定的. 对象的动态类型:目前所指对象的类型.是在运行期决定的. 动 ...