zoukankan      html  css  js  c++  java
  • SQL Server 中关于EXCEPT和INTERSECT的用法

    sql集合运算: union ,except,intersect

    熟练使用SQL Server中的各种用法会给查询带来很多方便。今天就介绍一下EXCEPT和INTERSECT。注意此语法仅在SQL Server 2005及以上版本支持。

    EXCEPT是指在第一个集合中存在,但是不存在于第二个集合中的数据。

    INTERSECT是指在两个集合中都存在的数据。

    create table t1(id int,mark char(2))

    go

    create table t2(id int,mark char(2))

    go

    insert into t1  select 1,'t1' union all  select 2,'t2' union all  select 3,'t3' union all  select 4,'t4' go insert into t2  select 2,'t2' union all  select 3,'m3' union all  select 5,'m5' union all  select 6,'t6'

    go

    select * from t1 EXCEPT select * from t2

    go

    select * from t1 INTERSECT select * from t2 go

    --EXCEPT结果集为 --1 t1 --3 t3 --4 t4

    --INTERSECT结果集为 --2 t2

    EXCEPT和INTERSECT的优先级:

    为了测试它们之间的优先级,运行下面的测试代码:

    create table t3(int id,mark char(2))

    go

    insert into t3  select 3,'t3' union all  select 3,'r3' union all  select 5,'m5' union all  select 5,'r5' union all  select 7,'b7' union all  select 8,'b8'

    go

    select * from t1

    EXCEPT

    select * from t2

    INTERSECT

    select * from t3

    --运行结果 --1 t1 --2 t2 --3 t3 --4 t4

    为什么会出现如上结果呢,请看下面的执行计划:

    原来t2和t3先进行的INTERSECT运算,得出5 m5结果集,再和t1进行EXCEPT运算。

    转载:原创自CSDN TJVictor专栏:http://blog.csdn.net/tjvictor

  • 相关阅读:
    Oracle连接数过多释放机制
    Sql优化(三) 关于oracle的并发
    查询Oracle正在执行的sql语句
    odi增量更新策略
    如何查询Oracle性能监控
    Oratop工具——实时数据库性能监控工具
    Oracle超出最大连接数问题及解决
    oracle查看允许的最大连接数和当前连接数等信息
    八大算法思想
    面向切面编程的解释
  • 原文地址:https://www.cnblogs.com/sunzhenyong/p/3460832.html
Copyright © 2011-2022 走看看