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计算,并将结果返回给客户端
   */