SQL 中 or 和union

简介: SQL 中 or 和union

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循环再对子查询表进行查询。


相关文章
|
8月前
|
SQL 数据库
20、绕过去除and、or、union select、空格的sql注入
20、绕过去除and、or、union select、空格的sql注入
171 0
为什么两个执行很快的SQL,union之后特别慢
UNION获取两个数据集并返回唯一重叠。换句话说,它花费时间去除重复。 所以如果只是想取两个SQL的结果,改成使用union all,不会有去重操作 如果还是想去重,可以在union all之后再包一层查询,使用distinct
|
7月前
|
SQL 数据库
SQL UNION 操作符
SQL UNION 操作符
67 9
|
5月前
|
SQL 存储 关系型数据库
|
6月前
|
SQL 分布式计算 MaxCompute
SQL开发问题之对于ODPS中的UNION操作,执行计划的问题如何解决
SQL开发问题之对于ODPS中的UNION操作,执行计划的问题如何解决
|
6月前
|
SQL 分布式计算 资源调度
MaxCompute操作报错合集之执行SQL Union All操作时,数据类型产生报错,该怎么解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
158 1
|
6月前
|
SQL 存储 数据库
深入理解 SQL UNION 运算符及其应用场景
【7月更文挑战第8天】SQL UNION 概述 `UNION` 运算符结合多个`SELECT`语句,生成不含重复行的结果集。基本语法是:`SELECT...FROM table1 UNION SELECT...FROM table2`。适用于整合相同结构数据表、不同条件查询结果及跨数据库数据。注意列数和数据类型需匹配,排序规则一致,大量操作可能影响性能。示例:合并`Students_Math`和`Students_Science`表中`StudentID`和`Grade`的数据。
101 0
|
7月前
|
SQL 数据库
SQL UNION 操作符
SQL UNION 操作符
72 3
|
8月前
|
SQL 关系型数据库 MySQL
MySQL SQL error: #1271 - Illegal mix of collations for operation ‘UNION‘
MySQL SQL error: #1271 - Illegal mix of collations for operation ‘UNION‘
495 0
|
8月前
|
SQL Web App开发 安全
CTF-Web安全--SQL注入之Union注入详解
CTF-Web安全--SQL注入之Union注入详解