数据库关键字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出来的会有重复的值.

目录
相关文章
|
10月前
|
存储 SQL 运维
速看!数据库与数据仓库的本质区别是什么?
本文深入解析了“数据库”与“数据仓库”的核心区别,涵盖设计目的、数据结构、使用场景、性能优化和数据更新五个维度。数据库主要用于支持实时业务操作,强调事务处理效率;数据仓库则面向企业分析决策,注重海量数据的整合与查询性能。二者在企业中各司其职,缺一不可。
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
11月前
|
存储 关系型数据库 MySQL
MySQL数据库中的 char 与 varchar的区别是什么
MySQL中的char和varchar均用于存储字符串,但有显著区别。char为定长类型,固定长度,存储空间始终为设定值,适合长度固定的数据如手机号。varchar为变长类型,仅占用实际数据所需空间,适合长度不固定的内容如用户名。二者在性能与空间利用上各有优劣,应根据实际场景合理选择。
631 0
|
SQL NoSQL Oracle
关系型与非关系型数据库的区别
关系型数据库是依据关系模型来创建的数据库,所谓关系模型就是“一对一”、“一对多”、“对多对”等。常见的关系型数据库有Oracle、MySQL、SQL Server等。非关系型数据库主要基于“非关系型模型”,其中非关系型模型有:列模型、键值对模型、文档类模型。比如redis属于键值对模型。 MongoDB属于文档模型 关系型数据库的优点: ● 易于维护:都是使用表结构,格式一致。 ● 使用方便:SQL语言通用,可用于复杂查询。 ● 复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。 关系型数据库的缺点: ● 读写性能比较差,尤其是海量数据的高效率读写。 ● 固定的表结构,灵活
|
SQL 存储 关系型数据库
在PG数据库中,not in 和except的区别
在PG数据库中,not in 和except的区别
|
数据库
【YashanDB 知识库】误配置 SYSTEM 级别的 STATISTICS_LEVEL 参数为 ALL 导致数据库性能下降
**标题:误配置 SYSTEM 级别的 STATISTICS_LEVEL 参数为 ALL 导致数据库性能下降** **简介:** 数据库性能骤降至正常水平的百分之一,主要表现为大量 free buffer wait 等待事件。原因是系统级别 STATISTICS_LEVEL 被误设为 ALL。解决方法是将其恢复为默认值 TYPICAL,执行命令:`ALTER SYSTEM SET statistics_level='TYPICAL' SCOPE=BOTH;` 以恢复正常性能。
|
SQL 安全 网络安全
Web应用防火墙(WAF)与数据库应用防火墙有什么区别?
Web应用防火墙(WAF)专注于Web应用系统和网站的应用层防护,可有效应对OWASP Top 10等常见攻击,防止SQL注入、CC攻击等。而数据库应用防火墙则位于应用服务器与数据库之间,提供数据库访问控制、攻击阻断、虚拟补丁等高级防护功能,直接保护数据库免受攻击。两者分别针对Web层和数据库层提供不同的安全保护。
570 4
|
存储 SQL JSON
介绍一下RDBMS和NoSQL数据库之间的区别
【10月更文挑战第21天】介绍一下RDBMS和NoSQL数据库之间的区别
612 2
|
SQL 关系型数据库 数据库连接
php连接数据库之PDO,PDO的简单使用和预定义占位符的使用以及PDOStatement对象的使用,占位符的不同形式,bindValue和bindParam绑定预定义占位符参数的区别
本文介绍了PHP中PDO(PHP Data Objects)扩展的基本概念和使用方法。内容包括PDO类和PDOStatement类的介绍,PDO的简单使用,预定义占位符的使用方法,以及PDOStatement对象的使用。文章还讨论了绑定预定义占位符参数的不同形式,即bindValue和bindParam的区别。通过具体示例,展示了如何使用PDO进行数据库连接、数据查询、数据插入等操作。
php连接数据库之PDO,PDO的简单使用和预定义占位符的使用以及PDOStatement对象的使用,占位符的不同形式,bindValue和bindParam绑定预定义占位符参数的区别
|
存储 安全 Java
springboot当中ConfigurationProperties注解作用跟数据库存入有啥区别
`@ConfigurationProperties`注解和数据库存储配置信息各有优劣,适用于不同的应用场景。`@ConfigurationProperties`提供了类型安全和模块化的配置管理方式,适合静态和简单配置。而数据库存储配置信息提供了动态更新和集中管理的能力,适合需要频繁变化和集中管理的配置需求。在实际项目中,可以根据具体需求选择合适的配置管理方式,或者结合使用这两种方式,实现灵活高效的配置管理。
347 0

热门文章

最新文章