• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    SQL SERVER中关于exists 和 in的简单分析

    In与Exists这两个函数是差不多的,但由于优化方案不同,通常NOT Exists要比NOT IN要快,因为NOT EXISTS可以使用结合算法二NOT IN就不行了,而EXISTS则不如IN快,因为这时候IN可能更多的使用结合算法。

    如图,现在有两个数据集,左边表示#tempTable1,右边表示#tempTable2。现在有以下问题:

    1.求两个集的交集?

    2.求tempTable1中不属于集#tempTable2的集?

    先创建两张临时表:

    create table #tempTable1
    (
      argument1 nvarchar(50),
      argument2 varchar(20),
      argument3 datetime,
      argument4 int
    );
    insert into #tempTable1(argument1,argument2,argument3,argument4)
    values('preacher001','13023218757',GETDATE()-1,1);
    insert into #tempTable1(argument1,argument2,argument3,argument4)
    values('preacher002','23218757',GETDATE()-2,2);
    insert into #tempTable1(argument1,argument2,argument3,argument4)
    values('preacher003','13018757',GETDATE()-3,3);
    insert into #tempTable1(argument1,argument2,argument3,argument4)
    values('preacher004','13023257',GETDATE()-4,4);
    insert into #tempTable1(argument1,argument2,argument3,argument4)
    values('preacher005','13023218',GETDATE()-5,5);
    insert into #tempTable1(argument1,argument2,argument3,argument4)
    values('preacher006','13023218',GETDATE()-6,6);
    insert into #tempTable1(argument1,argument2,argument3,argument4)
    values('preacher007','13023218',GETDATE()-7,7);
    insert into #tempTable1(argument1,argument2,argument3,argument4)
    values('preacher008','13023218',GETDATE()-8,8);
    
    create table #tempTable2
    (
      argument1 nvarchar(50),
      argument2 varchar(20),
      argument3 datetime,
      argument4 int
    );
    insert into #tempTable2(argument1,argument2,argument3,argument4)
    values('preacher001','13023218757',GETDATE()-1,1);
    insert into #tempTable2(argument1,argument2,argument3,argument4)
    values('preacher0010','23218757',GETDATE()-10,10);
    insert into #tempTable2(argument1,argument2,argument3,argument4)
    values('preacher003','13018757',GETDATE()-3,3);
    insert into #tempTable2(argument1,argument2,argument3,argument4)
    values('preacher004','13023257',GETDATE()-4,4);
    insert into #tempTable2(argument1,argument2,argument3,argument4)
    values('preacher009','13023218',GETDATE()-9,9);
    
    

    比如,我现在以#tempTable1和#tempTable2的argument1作为参照

    1.求两集的交集:

    1)in 方式

    select * from #tempTable2 where argument1 in
    (select argument1 from #tempTable1)
    

    2)exists 方式

    select * from #tempTable2 t2 where exists 
    (select * from #tempTable1 t1 where t1.argument1=t2.argument1)
    
    

    2.求tempTable1中不属于集#tempTable2的集

    1)in 方式

    select * from #tempTable1 where argument1 not in
    (select argument1 from #tempTable2)
    

    2)exists 方式

    select * from #tempTable1 t1 where not exists 
    (select * from #tempTable2 t2 where t1.argument1=t2.argument1)
    

    您可能感兴趣的文章:
    • php数组查找函数in_array()、array_search()、array_key_exists()使用实例
    • SQL查询中in和exists的区别分析
    • sql not in 与not exists使用中的细微差别
    • mysql not in、left join、IS NULL、NOT EXISTS 效率问题记录
    • UCenter info: MySQL Query Error SQL:SELECT value FROM [Table]vars WHERE noteexists
    • mysql insert if not exists防止插入重复记录的方法
    • Oracle In和exists not in和not exists的比较分析
    • MySQL: mysql is not running but lock exists 的解决方法
    • sql语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的语句
    上一篇:MSSQL段落还原脚本,SQLSERVER段落脚本
    下一篇:Transactional replication(事务复制)详解之如何跳过一个事务
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    SQL SERVER中关于exists 和 in的简单分析 SQL,SERVER,中,关于,exists,和,