数据库关键字Union和Union All的区别

简介: 数据库关键字Union和Union All的区别

Union和Union All的区别



SQL 的Union操作符合并两个或者多个select语句的结果.

请注意:Union内部的每个select语句必须拥有相同数量的列,且列必须有相似的数据类型,同时select语句中列的顺序必须相同.


table1

image.png


建表语句:


CREATE TABLE `table1`(
`id` INT(2) AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(2),
`age` INT(2)
)
INSERT INTO table1 VALUES('1','A','2');
INSERT INTO table1 VALUES('2','B','3');
INSERT INTO table1 VALUES('3','C','2');
INSERT INTO table1 VALUES('4','D','4');

table2


image.png

建表语句:


CREATE TABLE `table2`(
`id` INT(2)AUTO_INCREMENT PRIMARY KEY,
`name`VARCHAR(2),
`age`INT(2)
)
INSERT INTO table2 VALUES('1','a','2');
INSERT INTO table2 VALUES('2','b','5');
INSERT INTO table2 VALUES('3','c','2');
INSERT INTO table2 VALUES('4','d','3');


SQL Union语法:


eg:


1.1:执行sql

SELECT age FROM table1
UNION 
SELECT age FROM table2


1.2:结果


image.png


结论:默认地Union操作符作查询操作查询的值不得重复.不区分大小写.如果允许有重复的值请使用Union All


2.1:执行sql


SELECT age FROM table1
UNION
SELECT `name` FROM table2


2.2:结果


image.png


结论:Union操作列名总是等于Union中第一个select中的列名


3.1:Union和Union All查询出的结果默认都不会进行排序,上面展示的数据貌似排序但是只是数据碰巧故此做出以下数的改变来证名我们的观点


3.1.1:将表一的第二条记录的age字段进行调整如下


image.png


3.1.2:执行sql


SELECT `age` FROM table1
UNION 
SELECT `age` FROM table2 


3.1.3:结果


image.png


3.1.4:结论:Union操作后不会自动进行排序


4.1:Union操作如何排序


4.1.1:执行sql


SELECT `age` FROM table1
UNION 
SELECT `age` FROM table2 ORDER BY age


4.1.2:结果


image.png


注意1:Order By后面根据哪个字段排序,此字段必须是在Union连接的Select中都存在的字段.且两个表中都必须存在此字段.


验证注意1:


table1添加sex字段


image.png


执行sql


SELECT `age`,`sex` FROM table1
UNION 
SELECT `age` FROM table2 ORDER BY sex


结果: 报错—>Unknown column ‘sex’ in ‘field list’


table2添加sex字段


image.png


执行sql


SELECT `age` FROM table1
UNION 
SELECT `age` FROM table2 ORDER BY sex


结果: 报错—>Unknown column ‘sex’ in 'order clause


原因是要在select 后面加上分组的字段


SELECT `age`,`sex`  FROM table1
UNION 
SELECT `age`,`sex`  FROM table2 ORDER BY sex


结果:


image.png


证实了***注意1***


4.2:Union操作多字段如何排序


前面我们说了Union操作查询的值不重复,但是从上面看按照sex分组为女男男男,有三个男有重复的值.


注意2:此时的重复值判断标准是按照查询出的字段联合判断的重复值,而并非通过某一个字段进行重复的判断.


证实注意2:


table1添加score字段


image.png


table2添加score字段


image.png


执行sql


SELECT `age`,`sex`,`score` FROM table1
UNION 
SELECT `age`,`sex` ,`score` FROM table2 ORDER BY score


结果


image.png


证实了注意2


根据score分组,Union虽然select出的值没有重复,它是根据age+sex+score三个字段联合来判断是否是重复的值.而非某一个字段来判断重复的值.


SQL Union All语法


Union All 同Union的上部分的那些特性一致,只是它select出来的会有重复的值.

目录
相关文章
|
2天前
|
存储 数据库
Union All:数据库查询的得力助手
Union All:数据库查询的得力助手
|
2天前
|
Java Linux 数据库连接
达梦数据库屏蔽关键字
达梦数据库屏蔽关键字
9 1
|
10天前
|
关系型数据库 MySQL 数据库
【MySQL】MySQL数据库的delete from table和truncate table之间的区别
【MySQL】MySQL数据库的delete from table和truncate table之间的区别
213 1
|
1月前
|
关系型数据库 MySQL 数据库
mysql 设置环境变量与未设置环境变量连接数据库的区别
设置与未设置MySQL环境变量在连接数据库时主要区别在于命令输入方式和系统便捷性。设置环境变量后,可直接使用`mysql -u 用户名 -p`命令连接,而无需指定完整路径,提升便利性和灵活性。未设置时,需输入完整路径如`C:\Program Files\MySQL\...`,操作繁琐且易错。为提高效率和减少错误,推荐安装后设置环境变量。[查看视频讲解](https://www.bilibili.com/video/BV1vH4y137HC/)。
105 3
mysql 设置环境变量与未设置环境变量连接数据库的区别
|
7天前
|
SQL Java 数据库连接
【MyBatis】MyBatis操作数据库(二):动态SQL、#{}与${}的区别
【MyBatis】MyBatis操作数据库(二):动态SQL、#{}与${}的区别
14 0
|
1月前
|
Java 关系型数据库 数据库连接
数据库datetime 和tempshape的区别
该内容探讨了`datetime`和`tempshape`在Java和MyBatis中的使用区别。`datetime`对应`java.util.Date`,在MyBatis配置中为`DATE`类型,而`tempshape`配置为`TIMESTAMP`。当插入数据时,`tempshape`会自动记录创建和修改时间,而`datetime`需手动插入当前日期。更多区别可参考[CSDN博客](https://blog.csdn.net/qq_29039705/article/details/80416286)上的文章。
34 2
数据库datetime 和tempshape的区别
|
1月前
|
数据库
MybatisPlus属性字段为数据库关键字
MybatisPlus属性字段为数据库关键字
30 0
|
1月前
|
存储 NoSQL 关系型数据库
面试题14: 关系型数据库和非关系型数据库的区别
面试题14: 关系型数据库和非关系型数据库的区别
|
1月前
|
SQL Oracle 容灾
达梦数据库和orcale数据库有何区别
达梦数据库和orcale数据库有何区别
212 1
|
1月前
|
SQL 分布式计算 关系型数据库
Hive与传统关系型数据库有什么区别?请举例说明。
Hive与传统关系型数据库有什么区别?请举例说明。
116 0

热门文章

最新文章