UNION 指令的目的是将两个 SQL 语句的结果合并起来。从这个角度来看, UNION 跟 JOIN 有些许类似,
因为这两个指令都可以由多个表格中提取资料。 UNION 的一个限制是两个SQL查询出来的结果必须具有相
同的列数、对应列的类型必须一样,这样才可以做union操作
在数据库中,UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有
所不同。
UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复
的记录再返回结果。
假设我们有以下的两个表格,
Store_Information 表格
Sql代码
store_name Sales Date
Los Angeles $1500 Jan-05-1999
San Diego $250 Jan-07-1999
Los Angeles $300 Jan-08-1999
Boston $700 Jan-08-1999
Internet Sales 表格
Sql代码
Date Sales
Jan-07-1999 $250
Jan-10-1999 $535
Jan-11-1999 $320
Jan-12-1999 $750
而我们要找出来所有有营业额 (sales) 的日子。要达到这个目的,我们用以下的 SQL 语句: Sql代码
SELECT Date FROM Store_Information
UNION
SELECT Date FROM Internet_Sales
这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表
数据量大的话可能会导致用磁盘进行排序。
而UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返
回的结果集就会包含重复的数据了。
从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的
话,那么就使用UNION ALL,
众所周知的几个结果集集合操作命令,今天详细地测试了一下,发现一些问题,记录备考。
假设我们有一个表Student,包括以下字段与数据:
drop table student;
create table student
(
id int primary key,
name nvarchar2(50) not null,
score number not null
);
insert into student values(1,'Aaron',78);
insert into student values(2,'Bill',76);
insert into student values(3,'Cindy',89);
insert into student values(4,'Damon',90);
insert into student values(5,'Ella',73);
insert into student values(6,'Frado',61);
insert into student values(7,'Gill',99);
insert into student values(8,'Hellen',56);
insert into student values(9,'Ivan',93);
insert into student values(10,'Jay',90);
commit;
Union和Union All的区别。
select *
from student
where id < 4
union
select *
from student
where id > 2 and id < 6
结果将是
1 Aaron 78
2 Bill 76
3 Cindy 89
4 Damon 90
5 Ella 73
如果换成Union All连接两个结果集,则返回结果是:
1 Aaron 78
2 Bill 76
3 Cindy 89
3 Cindy 89
4 Damon 90
5 Ella 73
可以看到,Union和Union All的区别之一在于对重复结果的处理。
接下来我们将两个子查询的顺序调整一下,改为
--Union
select *
from student
where id > 2 and id < 6
union
select *
from student
where id < 4
结果:
1 Aaron 78
2 Bill 76
3 Cindy 89
4 Damon 90
5 Ella 73
--Union All
select *
from student
where id > 2 and id < 6
union all
select *
from student
where id < 4
结果为:
3 Cindy 89
4 Damon 90
5 Ella 73
1 Aaron 78
2 Bill 76
3 Cindy 89
据此我们可知,区别之二在于对排序的处理。Union All将按照关联的次序组织数据,而Union会根据一定
规则进行排序。那么这个规则是什么?我们换个查询方式看看:
select score,id,name
from student
where id > 2 and id < 6
union
select score,id,name
from student
where id < 4
结果如下:
73 5 Ella
76 2 Bill
78 1 Aaron
89 3 Cindy
90 4 Damon
和我们预料的一致:将会按照字段出现的顺序进行排序。之前我们的查询是基于id,name,score的字段顺序
,那么结果集将按照id优先进行排序;而现在新的字段顺序也改变了查询结果的排序。并且,是按照给定
字段a,b,c...的顺序进行的order by。即结果是order by a,b,c...........的。我们看下一个查询:
select score,id,name
from student
where id > 2
union
select score,id,name
from student
where id < 4
结果如下:
56 8 Hellen
61 6 Frado
73 5 Ella
76 2 Bill
78 1 Aaron
89 3 Cindy
90 4 Damon
90 10 Jay
93 9 Ivan
99 7 Gill
可以看到,对于score相同的记录,将按照下一个字段id进行排序。如果我们想自行控制排序,是不是用
order by指定就可以了呢?答案是肯定的,不过在写法上有需要注意的地方:
select score,id,name
from student
where id > 2 and id < 7
union
select score,id,name
from student
where id < 4
union
select score,id,name
from student
where id > 8
order by id desc
order by子句必须写在最后一个结果集里,并且其排序规则将改变操作后的排序结果(使用union后的结果
使用order by时,select子句中必须明确指出哪些字段,不然的话会出错)。对于Union、Union All、
Intersect、Minus都有效。
注意:
1,Union可以对字段名不同但数据类型相同的结果集进行合并;
2,如果字段名不同的结果集进行Union,那么对此字段的Order by子句将失效。
============================================================================
Intersect和Minus的操作和Union基本一致,这里一起总结一下:
Union,对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union All,对两个结果集进行并集操作,包括重复行,不进行排序;
Intersect,对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
Minus,对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。
可以在最后一个结果集中指定Order by子句改变排序方式。
分享到:
相关推荐
3. UNION 语句可以使用多个 SELECT 语句,中间使用 UNION 或 UNION ALL 连接。 MySQL UNION 与 UNION ALL 的区别在于,UNION 会删除结果集中重复的记录,而 UNION ALL 则会把所有的记录返回。 UNION ALL 的效率高于...
同时,本教程还涵盖了 SQL 高级知识,如 Top 语句、Like 语句、通配符、In 语句、Between 语句、Aliases 语句、Join 语句、Inner Join 语句、Left Join 语句、Right Join 语句、Full Join 语句、Union 语句、Select ...
12. UNION语句:使用UNION语句合并查询结果。 13. ORDER BY子句(排序):使用ORDER BY子句对查询结果进行排序。 14. GROUP BY子句(分组):使用GROUP BY子句对查询结果进行分组。 数据连接 15. 连接的使用(JOIN...
### SQL语句 UNION 和 UNION ALL 使用详解 #### 一、SQL UNION 和 UNION ALL 的基本概念 **UNION** 和 **UNION ALL** 是 SQL 语言中用于合并两个或多个 SELECT 语句结果集的关键字。这两种操作符都可以帮助我们...
本文总结了一些常用的SQL语句,包括DELETE、TRUNCATE、UPDATE、SELECT、AS用法、LIKE语句、NOT EXISTS语句、UNION语句、INSERT语句和全文索引等。这些语句可以帮助开发者更好地管理数据库和查询数据。
1. UNION运算符:使用UNION语句组合两个结果表并消除重复行。 2. EXCEPT运算符:使用EXCEPT语句获取 TABLE1 中但不在 TABLE2 中的行。 3. INTERSECT运算符:使用INTERSECT语句获取 TABLE1 和 TABLE2 中都有的行。 ...
SQLplus 中提供了多种合并查询,例如 INTERSECT 语句、MINUS 语句、UNION 语句、UNION ALL 语句等。 层次查询 SQLplus 中提供了多种层次查询,例如 START WITH 语句、CONNECT BY 语句等。 选择查询 SQLplus 中...
在MYSQL 中,攻击者可以通过使用 UNION 语句、子查询、内置函数等方式来实现注入攻击。 (一)确认数据库类型 在 MYSQL 中,攻击者可以使用 `and ord(mid(version(),1,1))>51` 语句来确认数据库类型。这个语句将...
1. UNION 运算符:使用 UNION 语句可以组合两个结果表,并消除重复行。 2. EXCEPT 运算符:使用 EXCEPT 语句可以包括所有在 TABLE1 中但不在 TABLE2 中的行,并消除重复行。 3. INTERSECT 运算符:使用 INTERSECT ...
如果限制条件中其他字段没有索引,可以使用 union all 或 union 语句代替。 7. 尽量用 union all 代替 union union 和 union all 的差异主要是前者需要将结果集合并后再进行唯一性过滤操作,这就会涉及到排序,...
SparkSQL 支持 Union All 和 Union 语句,但是不支持顶层的 Union All,例如 `select key from src UNION ALL select key from test;` 这样的语句是无法执行的。但是,SparkSQL 支持 `select * from (select key ...
此外,使用UNION语句也可以避免顺序存取,将需要分别查询的数据合并为一个查询,利用索引来加速查询过程。 其次,提供冗余搜索参数是为了给优化器更多的选择空间。例如,若在where子句中提供一个额外的搜索条件,...
摘要:本文总结了简单 SQL 数据库语句的基本用法,以学生成绩的管理为例进行描述,涵盖了查询结果中的列名显示、精确查找、时间类型变量的处理、集函数、分组、union 联合查询结果、多表查询等多个方面的知识点。...
为了防御 Or 1=1 与 union 语句入侵,程序员需要在网站设计过程中认真地检查输入数据的合法性和安全性。 四、XSS 跨站攻击 XSS 跨站攻击是 PHP 网站设计中最常见的安全风险之一。攻击者可以通过提交恶意的脚本代码...
SQL学习知识点总结 ...* UNION 语句:用于合并两个查询结果。 * SELECT INTO 语句:用于将查询结果插入到另一个表中。 本文档涵盖了SQL学习的基础知识点,对于初学者或者需要复习SQL知识的人员非常实用。
最后,我们使用 UNION 语句来将两个结果集组合起来。 知识点: * FULL JOIN 语句 * UNION 语句 * WHERE 子句 试题二:使用 SQL 根据表 A、表 B 计算出表 C 在这个试题中,我们需要使用 SQL 根据表 A 和表 B 计算...
* 确认 SQL 语句使用的列数,确保 union select 语句的列数目与 select 语句的列数目一致。 * 确认什么样的列被输出到页面上。 * 检索数据库的元数据表来获取信息。 * 检索数据库的其他表来获取信息。 获取数据库...
UNION 语句是指将多个查询结果合并成一个结果集。使用 UNION 语句可以实现多表数据合并。 十三、子查询 子查询是指在一个查询语句中嵌套另一个查询语句。使用子查询可以实现复杂的数据查询和处理。 十四、十五、...
攻击者可以使用 union 语句来联合查询多个表,例如:select name,password,id from user union select user,pwd,uid from admin。如果遇到 order by 错误提示,执行下 2 次 union 可解决。 4. 爆指定表名内容 爆...
UNION 语句是 Hive 数据查询语言中的一种重要语句,用于将多个 SELECT 语句的查询结果合并到一个结果集中。 JOIN 语句 JOIN 语句是 Hive 数据查询语言中的一种重要语句,用于将两个或多个表格的数据合并到一个结果...