精华内容
下载资源
问答
  • SQL UNION vs OR 性能

    2020-12-14 13:24:04
    本文整理自:stackoverflow 翻译自Bill Karwin回答: 要么你读的那篇文章用了一个不好的例子,要么你误解了他们的...不需要改成UNION。 更棘手的情况是,OR条件涉及两个不同的列。 select username from users where c
  • sql union代替or

    千次阅读 2014-03-18 19:31:30
    SQL> SELECT deptno FROM emp WHERE empno = 7788 OR job = 'SALESMAN' ORDER BY 1; DEPTNO ---------- 20 30 30 30 30 SQL> SELECT deptno FROM emp WHERE empno = 7788 UNION SELECT deptno F
    ---原始SQL
    SQL> SELECT deptno FROM emp WHERE empno = 7788 OR job = 'SALESMAN' ORDER BY 1;
    
        DEPTNO
    ----------
    	20
    	30
    	30
    	30
    	30
    
    SQL> SELECT deptno FROM emp WHERE empno = 7788
    UNION
    SELECT deptno FROM emp WHERE job = 'SALESMAN';  2    3  
    
        DEPTNO
    ----------
    	20
    	30
    
    
    为什么丢数据呢?
    
    SQL> SELECT deptno FROM emp WHERE empno = 7788;
    
        DEPTNO
    ----------
    	20
    
    SQL> SELECT deptno FROM emp WHERE job = 'SALESMAN';
    
        DEPTNO
    ----------
    	30
    	30
    	30
    	30
    
    
    原来emp表被去从数据了
    
    SQL> SELECT deptno
    FROM
    (
    SELECT empno,deptno FROM emp WHERE empno = 7788
    UNION
    SELECT empno,deptno FROM emp WHERE job = 'SALESMAN'
    )
    ORDER BY 1;  2    3    4    5    6    7    8  
    
        DEPTNO
    ----------
    	20
    	30
    	30
    	30
    	30
    
    
    SQL> SELECT empno,deptno FROM emp WHERE empno = 7788;
    
         EMPNO     DEPTNO
    ---------- ----------
          7788	   20
    
    SQL> SELECT empno,deptno FROM emp WHERE job = 'SALESMAN';
    
         EMPNO     DEPTNO
    ---------- ----------
          7499	   30
          7521	   30
          7654	   30
          7844	   30
    
    加上empno唯一列后,就不会在去从的时候丢失数据。

    展开全文
  • SQLorunion

    千次阅读 热门讨论 2020-05-10 20:10:49
    access2010查询中SQL数据操纵中写union,联合查询,将多个查询结果合并起来时,系统会自动去掉重复元组,做操作的时候感觉和or语句做出来的结果一样,就在想这两个有什么区别呢,所以上网查了查,真的有写它们之间的...

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

    展开全文
  • 关于sqlunionor的区别和联系

    千次阅读 2019-08-29 10:28:03
    关于sqlunionor的区别和联系关于sqlunionor的区别和联系前提说明综合概述总结 关于sqlunionor的区别和联系 这是我第一次写博客,我也只是一个刚毕业的小白,不是什么技术大犇,很多见解和看法会不全面,...

    关于sql中union和or的区别和联系

    这是我第一次写博客,我也只是一个刚毕业的小白,不是什么技术大犇,很多见解和看法会不全面,欢迎指正,共同进步。

    前提说明

    用的是sql server 2008 数据库;
    系统win 10;

    创建了两张结构一致的表 TEST_USER 和TEST_USER2:

    CREATE TABLE [dbo].[TEST_USER](
    [id] [int] NOT NULL,
    [userName] nvarchar NOT NULL,
    [passWord] nvarchar NOT NULL,
    [age] [int] NOT NULL
    )

    综合概述

    union:用于连接两个 select 语句,查询出的字段,必须相同;
    union all:和 union 基本上一致,区别在于 union all 会重复显示两条 select 语句查询出的字段,而 union 不会。
    在这里插入图片描述

    select * from dbo.test_user
    union
    select * from dbo.test_user2

    or:用于 where 后,意思是查询 age 大于30或者 age 不等于11的数据,只要符合其中一条判断,就返回;

    select * from dbo.test_user u where u.age > 30 or u.age <> 11

    联系:
    如果两个 select 查询的是同一张表的内容,并且判断的是同一个字段,那么 union 和 or 可以相互转换;
    在这里插入图片描述

    区别:

    1. union 用于连接两个sql,所以可以查询返回列相同的 select 语句,所以表可以不是同一张,而 or 的对象只能是同一张表;
    2. union 可以实现将判断不同字段的两个sql 联合查询,or 固然也可以实现,但是很容易让人绕进去,没有 union 那么通俗易懂。

    总结

    最后,说说第一次写博客的体会吧。

    原本以为,我已经对这个理解非常透彻了,结果在写博客的过程中,才发现,自己还有很多很多的情况没有考虑完全,所以,这一篇是不完整的,等有空,我会花时间将其补全。
    还有就是以前看别人写的,会吐槽写的少,自己写才发现,写这个是真的难,不仅得对这一块知识理解透彻,还得考虑方方面面,对自己的表达能力也是很大的考验,现在我特别能体会那些博主的苦~~~~~~~~

    展开全文
  • sql union all排序问题

    2017-03-28 09:03:37
    SELECT * FROM ( (SELECT rp1.id FROM rb_problem rp1 WHERE rp...这两个sql分开查询时sql1的结果为32,30,sql2的结果为31,但是当用union all拼接起来时为何结果就变成30,32,31了,我的子查询语句的排序完全没有作用了
  • sql语句orunion all的执行效率比较

    千次阅读 2013-01-18 11:07:29
    SQL语句有多个or语句时,可以考虑使用union或者union all代替来提高速度。使用orSQL语句往往无法进行优化,导致速度变慢。但这不是固定的,有时候使用or速度会更快些。具体情况还要经过测试为准。如果加索引的话...

    当SQL语句有多个or语句时,可以考虑使用union或者union all代替来提高速度。使用or的SQL语句往往无法进行优化,导致速度变慢。但这不是固定的,有时候使用or速度会更快些。具体情况还要经过测试为准。如果加索引的话,也可能实现速度优化。

        实验表格如下,实际数据有2,000,000条,从里面返回大约最多1000行左右的数据。

    XYInlineCDPT
    1200240058010003003003400
    1200240858010053003013402
    1200241658010103003023404
    1200242458010153003033406
    ...............

    or语句(部分节选)

    SELECT * FROM tablename where (cdp= 300 and inline=301) or (cdp= 301 and inline=301) or (cdp= 302 and inline=301) or (cdp= 303 and inline=301) or (cdp= 304 and inline=301) or (cdp= 305 and inline=301) or (cdp= 306 and inline=301) or (cdp= 307 and inline=301)

    union all语句(部分节选)

    SELECT * FROM tablename where (inline= 300 and cdp=300) union all SELECT * FROM tablename where (inline= 301 and cdp=300) union all SELECT * FROM tablename where (inline= 302 and cdp=300) union all SELECT * FROM tablename where (inline= 303 and cdp=300)

    返回不规则的900条数据,前者用了60多秒,后者用了8秒左右。

    展开全文
  • with T1 As (Select * From Table1)Select * From T1 where sex=1 Union All Select * From T1 where type=2   转载于:https://www.cnblogs.com/0banana0/archive/2011/08/30/2159684.html
  • hive sql union all的性能优化

    千次阅读 2019-08-13 11:44:10
    union的巧妙用法,使用union也可以横向合并sql查询结果 我们都知道union是纵向连接查询结果,join是横向,但是用union all连接大家试过吗? 恢复菜鸟代码如下: select ep.productid,productname,count(st.tduserid)...
  • SQL优化——使用union关键字代替or

    千次阅读 2019-01-31 13:44:35
    SQL语句中使用了or关键字索引会失效,在数据量较大的时候查找效率较低,因此可以使用unionunion all代替。 例如: select ename, job, from t_emp where job='manager' or job='saleman'; 可以改变成: select...
  • SQL优化案例-union代替or(九)

    千次阅读 2018-11-26 09:28:24
    随着Oracle版本的提升,优化器更趋向于智能,比如,12c中的标量子查询被transform成外连接。 select (select max(object_id) from test2 b ...进入正题,当SQL中同时有or和子查询时,这种情况下查询无法展开(unne...
  • sql中between and 、union all、or between and union all or 其中or会导致全表查询,速度很慢 between and 这要快很多。 SELECT t, ms, content, confirm_status, ied_id, VALUE...
  • 解决方案:避免使用in 或者 or (or会导致扫表),使用union all 使用UNION ALL: (select * from article where article_category=2 order by article_iddesc limit 5) UNION ALL (select * from article...
  • sql改写or 改成union不等价数据变多

    千次阅读 2014-06-25 11:27:41
    改成union 后 由于cust_id和fr_id一样,但是sum(CI_BALANCE) as sum_CI_BALANCE和sum(LN_BALANCE) as sum_LN_BALANCE不一致 SQL> select * from ( select cust_id, FR_ID, sum(CI_BALANCE) as sum_CI_BALANCE, sum...
  • 环境sqli-labs less 25 1、输入特殊字符,报错 ...3、输入and、or都会被过滤,报错,输入||正常,所以可以判断是大小写过滤 http://192.168.1.121/sqli/Less-25/?id=1’ and 1=1 --+ http://192.168.1.121/sqli/...
  • 某系统测试环境有支SQL执行时间较长,开发人员请求dba协助优化。 原SQL如下: SELECT g.id,  ----省略-----  FROM g,  y,  t,  o  WHERE g.ycon_id = y.id  AND t.ycon_id
  • SQL union关键字用法

    千次阅读 2014-03-07 11:25:19
    最近复习MYSQL,看到“union”这个一个关键词。书中写的很简单,网上查了半天,也觉得写的太笼统。  自己总结下吧。 1 对于目前项目来说,这种情况可以用到union:  比如我们有两个支付接口,一个是支付通,...
  • SQL优化: 应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描 原语句: select * from table where id=666 and num=10 or num=20 SqlAlchemy or语句 list = Table.query....
  • union all select * from table where table_column=2 ) select * from pagelist 第二种写法: with pagelist as ( select * from table where table_column=1 or table_column=2 ) select * from ...
  • SQL中使用or影响性能的解决办法 近期做了一个存储过程,执行时发现非常的慢,竟然需要6、7秒!经排查,发现时间主要都耗在了其中一段查询语句上。这个语句用于查出结构相同的两个表中,其中两个字段的任一个字段...
  • sqlunionunion all的区别

    千次阅读 2017-06-26 23:07:21
    union的主要作用是将多个select的结果进行合并,每个select的语句执行结果必须得满足如下要求才能进行union操作: UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔(因此,如果组合4条...
  • SQL优化及UNION ALL替代UNION

    千次阅读 2017-12-12 15:59:34
    通常情况下,用UNION替换WHERE子句中的OR将会起到较好的效果。对索引列使用OR将造成全表扫描。注意,以上规则只针对多个索引列有效。假如有column没有被索引,查询效率可能会因为您没有选择OR而降低。在下面的例子中...
  • 1.union的用法union 的英文意思是联合,跟join 类似,把两个sql语句的结果合并在一起。union的条件:两个sql语句查询得到字段数目要一致(字段可以不一样)。查询的结果有进行排重过程,等价于sql中的distinct。例子...
  • UNION指令的目的是将两个SQL语句的结果合并起来。从这个角度来看, 我们会产生这样的感觉,UNION跟JOIN似乎有些许类似,因为这两个指令都可以由多个表格中撷取资料。 UNION的一个限制是两个 SQL 语句所产生的栏位...
  • OR 改写union数据变少

    千次阅读 2014-06-19 23:52:44
    SQL> SELECT deptno FROM emp WHERE mgr = 7698 OR job = 'SALESMAN' ORDER BY 1; DEPTNO ---------- 30 30 30 30 30 SQL> SELECT deptno FROM emp WHERE mgr = 7698
  • SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集。 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。 ...
  • 优化方案2: 将 or 改成 union,提升至35s(各种调整,一直怀疑跟or有关系,后面调整成union其他不变,果真效率不一样;但方案1只是调整了下大小表顺序,并未调整其他,其效率同样提升很大;不太明白sparksql内部到底走了什么...
  • UnionUnion的区别(sql 和 hql)

    千次阅读 2019-02-16 08:38:54
    一、UnionUnion all 在sql中的区别 UNION用的比较多union all是直接连接,取到得是所有值,记录可能有重复 union 是取唯一值,记录没有重复 1、UNION 的语法如下:  [SQL 语句 1]  UNION  [SQL 语句 2] 2...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 89,884
精华内容 35,953
关键字:

orsqlunion速度