sql except用法

sql except用法
  •  
  • SQL  Server中EXCEPT用于查询包含在A语句的结果集中但不包含在B语句的结果集中的结果
  •  
  • 一、except语法

    { <query_specification> | ( <query_expression> ) }
    { EXCEPT }
    { <query_specification> | ( <query_expression> ) }

    二、except形象图

    阴影部分就是结果集

     

    三、SQL  Server中使用EXCEPT进行集合运算时,需注意以下几点:
     
    1、如果EXCEPT操作符左边和右边的查询返回的可比较列的数据类型是具有不同排序规则的字符数据类型,则根据排序规则优先级的规则执行所需的比较。
     
    2、通过比较行来确定非重复值时,两个NULL值被视为相等。
     
    3、EXCEPT返回的结果集的列名与操作数左侧的查询返回的列名相同。
     
    4、EXCEPT返回的结果集中的任何列的为空性(是否可以为空)与操作数左侧的查询返回的对应列的为空性相同。

    四、如果EXCEPT与表达式中的其他运算符一起使用,则按以下优先顺序对其进行运算:

     

    1、括号中的表达式。

    2、INTERSECT操作符。

    3、基于在表达式中的位置从左到右求值的EXCEPT和UNION运算。

     

    五、SQL  Server中EXCEPT使用示例

  •  
  • SQL 代码   复制
  • 
    USE TSQLFundamentals2008;
    GO
    
    -- EXCEPT差集运算
    -- 以下代码返回属于职员地址,但不属于客户地址的不同地址
    SELECT country,region,city FROM HR.Employees
    EXCEPT
    SELECT country,region,city FROM Sales.Customers;
    
    		
  • SQL 代码   复制
  • 
    USE Library
    SELECT * FROM TableA 
    EXCEPT 
    SELECT * FROM TableB 
    INTERSECT 
    SELECT * FROM TableC
    
    		
  • 说明:首先执行了tableB表和tableC表的交运算,而后再与tableA表进行差运算。如果要先执行tableA表与tableB表的差运算,而后再与TalbeC表进行交运算,则必须使用括号改变运算的先后顺序,代码如下:

  •  
  • SQL 代码   复制
  • 
    USE Library
    (SELECT * FROM TableA 
    EXCEPT 
    SELECT * FROM TableB)
    INTERSECT 
    SELECT * FROM TableC
    
    		
  • 标签: