标签归档:结果集

mssql sqlserver into 中使用 union(union all)、except、intersect关键字的方法分享


摘要:
下文分享在into关键字将组合出的结果集快速的插入到一张新表中,
如下所示:
实验环境:sql server 2008 R2



一. into中使用操作结果集关键字的用法分享

当我们要在select into中使用结果集操作关键字时,我们应在第一个查询结果集的from 函数前面加入into 操作语句,
也可以先生成结果集,然后再查询和插入结果集,如下例所示:

----select *into方式1   
select * into #tmpTable 
  from  [maomao365.com_A]
  except 
  select * from 
   [maomao365.com_B]
   intersect 
  select * from 
   [maomao365.com_C]
   union 
  select * from 
   [maomao365.com_D]

---select *into 方式2,将结果集采用括号限定符进行修饰和限制,如下所示
select * into #tmpTable 
  from 
(select * from  [maomao365.com_A]
  except 
  select * from 
   [maomao365.com_B]
   intersect 
  select * from 
   [maomao365.com_C]
   union 
  select * from 
   [maomao365.com_D]
) as tmp 

mssql sqlserver union(union all)、except、intersect关键字执行顺序分享


摘要:
下文分享union、except、intersect 三个关键字的执行顺序和优先级(注:union all同union关键字类似),如下所示:
实验环境:sql server 2008 R2



在sql脚本的执行顺序中,我们可以采用括号来限定执行脚本的优先级,当一个脚本在表达式中同时使用以上三个关键字时,
intersect运算符的优先级要高于union 和except关键字;
union和except关键字的优先级相同;
当一组sql脚本同时包含union、except、intersect三个关键字时,将首先执行intersect关键字,
然后再按照sql从左到右的顺序依次执行,
—–特别说明,如果存在括号限定符,则先运行括号中的脚本(因为括号的优先级大于一切)。


---例:
     select * from table1
     union 
     select * from table2
      except 
     select * from table3
     intersect 
     select * from table4 
  /*
    由于以上脚本没有采用括号限定优先级,
    所以第一步执行,并缓存执行结果 t1
    select * from table3
     intersect 
     select * from table4   
    ----第二步执行,并缓存结果 t2 
    table1和 table2的union 
     ---第三部执行 t2 except table3 并缓存结果 t3
   
     ---第四步执行 t3 同t1的except计算,并将结果返回给客户端
   */