or和union区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了or和union区别相关的知识,希望对你有一定的参考价值。
参考技术A 原文链接: https://blog.csdn.net/lisainan66/article/details/106040944/access2010查询中SQL数据操纵中写union,联合查询,将多个查询结果合并起来时,系统会自动去掉重复元组,做操作的时候感觉和or语句做出来的结果一样,就在想这两个有什么区别呢,所以上网查了查,真的有写它们之间的关系。
SQL 中 or 和union的区别:
UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。如:
select * from users1 union select * from user2
这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。
or是把符合两个条件的都查询出来取并集,不会去掉相同的记录。
select * from user1 where q = '1' or q='2'
就是把q = '1'和 q='2 的所有结果都返回,不去重的。
总结一下就是union会删除重复的记录,or不会去掉重复的记录,二者都是对结果集的合并。
另外一篇文章中提到where子句中使用or会引起全表扫描,一般的用union来代替or。事实证明,这种说法对于大部分都是适用的
看来,用union在通常情况下比用or的效率要高的多。但是如果or两边的查询列是一样的话,那么用union反倒和用or的执行速度差很多,虽然这里union扫描的是索引,而or扫描的是全表。
后来又思考了一下or和in的区别,or 是或者 两个条件满足一个就可以。in 用在于包含 (一段语句或者几个值 ),还有说in是把父查询源表和子查询表作hash连接。or是对父查询表作loop循环,每次loop循环再对子查询表进行查询。
union 和 union all的区别
union 和 union all的区别
相同点和不同点
相同点:
union和union all 都是对于多个查询结果的并集进行操作
不同点:
1.union 不会输出两个结果并集的重复行
2.union all 会输出两个结果并集的重复行
实验表
字段解释:
xh:学号
xh:姓名
nl:年龄
create table student(xh number,xm varchar2(4),nl int);
insert into student values(1,‘A‘,21);
insert into student values(2,‘B‘,21);
insert into student values(3,‘A‘,21);
insert into student values(4,‘A‘,21);
insert into student values(5,‘A‘,21);
insert into student values(6,‘C‘,21);
insert into student values(7,‘B‘,21);
查看表
SQL> select * from student;
XH XM NL
---------- ------------ ----------
1 A 21
2 B 21
3 A 21
4 A 21
5 A 21
6 C 21
7 B 21
7 rows selected.
SQL>
例子
union
SQL> select * from student
2 union
3 select * from student where xm=‘A‘;
XH XM NL
---------- ------------ ----------
1 A 21
2 B 21
3 A 21
4 A 21
5 A 21
6 C 21
7 B 21
7 rows selected.
SQL>
union all
SQL> select * from student
2 union all
3 select * from student where xm=‘A‘;
XH XM NL
---------- ------------ ----------
1 A 21
2 B 21
3 A 21
4 A 21
5 A 21
6 C 21
7 B 21
1 A 21
3 A 21
4 A 21
5 A 21
11 rows selected.
SQL>
以上是关于or和union区别的主要内容,如果未能解决你的问题,请参考以下文章