복붙노트

[SQL] 특정 조건을 확인하기 위해 COALESCE를 사용하여 대 ISNULL을 사용하십니까?

SQL

특정 조건을 확인하기 위해 COALESCE를 사용하여 대 ISNULL을 사용하십니까?

나는 여러 매개 변수가 유착에 전달 될 수 있다는 것을 알고 있지만까지로 할 때 당신은 기본값을 사용하거나 대신 사용 ISNULL에 더 나은 방법입니다 않는, 존재하지 않는 있는지 확인하기 위해 하나의 발현을 확인?

둘 사이에 어떤 성능 이득이 있습니까?

해결법

  1. ==============================

    1.연결 Microsoft에보고 된이 문제는 COALESCE와 ISNULL 몇 가지 차이점을 보여준다 :

    연결 Microsoft에보고 된이 문제는 COALESCE와 ISNULL 몇 가지 차이점을 보여준다 :

  2. ==============================

    2.그럴 생각하지만, COALESCE는 SQL 92 표준보다 다른 데이터베이스에 의해 지원입니다. 당신이 휴대 갈 경우, ISNULL을 사용하지 마십시오.

    그럴 생각하지만, COALESCE는 SQL 92 표준보다 다른 데이터베이스에 의해 지원입니다. 당신이 휴대 갈 경우, ISNULL을 사용하지 마십시오.

  3. ==============================

    3.COALESCE에서는 ISNULL에서 당신이 단 하나 개의 표현을 확인할 수있는 여러 표현을 가질 수

    COALESCE에서는 ISNULL에서 당신이 단 하나 개의 표현을 확인할 수있는 여러 표현을 가질 수

    COALESCE ( expression [ ,...n ] ) 
    
    ISNULL ( check_expression , replacement_value )
    
  4. ==============================

    4.언급 할만큼 가치는 둘 사이에 처리 유형도 변화를 (이 관련 응답 항목 (2) 참조) 할 수 있다는 것입니다.

    언급 할만큼 가치는 둘 사이에 처리 유형도 변화를 (이 관련 응답 항목 (2) 참조) 할 수 있다는 것입니다.

    쿼리가 null 비교를 작성하기위한 바로 가기를 사용하려고 말 :

    select * from SomeTable
     where IsNull(SomeNullableBitField, -1) != IsNull(SomeOtherNullableBitField, -1);
    

    어떤 다르다

    select * from SomeTable
     where coalesce(SomeNullableBitField, -1) != coalesce(SomeOtherNullableBitField, -1);
    

    첫 번째 경우, ISNULL ()는 비트를 될 수있는 형태를 강제하기 때문에 두 번째 경우는 int로 양쪽을 촉진하는 반면 (그래서 -1 사실로 변환된다).

    with input as 
    (
      select convert(bit, 1) as BitOn,      
             convert(bit, 0) as BitOff,
             convert(bit, null) as BitNull
    )
    select BitOn, 
           BitOff,
           BitNull,
           IsNull(BitOn, -1) IsNullBitOn,         -- true
           IsNull(BitOff, -1) IsNullBitOff,       -- false
           IsNull(BitNull, -1) IsNullBitNull,     -- true, converts the -1 to bit
           coalesce(BitOn, -1) CoalesceBitOn,     -- 1
           coalesce(BitOff, -1) CoalesceBitOff,   -- 0       
           coalesce(BitNull, -1) CoalesceBitNull  -- -1
      from input;
    

    질문 자체에 유사한 주석 / 링크 (@Martin 스미스)가있다.

  5. ==============================

    5.내가 명시 적으로 표시가 표시되지 않는 한 가지 중요한 점은 ISNULL의 출력 유형이 첫 번째 표현식과 유사하다는 것이다하지만 COALESCE로는 가장 높은 우선 순위의 값의 데이터 유형을 반환합니다.

    내가 명시 적으로 표시가 표시되지 않는 한 가지 중요한 점은 ISNULL의 출력 유형이 첫 번째 표현식과 유사하다는 것이다하지만 COALESCE로는 가장 높은 우선 순위의 값의 데이터 유형을 반환합니다.

    DECLARE @X VARCHAR(3) = NULL
    DECLARE @Y VARCHAR(10) = '123456789'
    /* The datatype returned is similar to X, or the first expression*/
    SELECT ISNULL(@X, @Y) ---> Output is '123'
    /* The datatype returned is similar to Y, or to the value of highest precedence*/
    SELECT COALESCE(@X, @Y) ---> Output is '123456789'
    
  6. ==============================

    6.널 (NULL)와 COALESCE는 항상 서로 호환되지 않습니다. 그것은 그것의 더 나은 다른 통해 하나를 사용할 때 알기 위해 자신의 차이를 알고 가치 :

    널 (NULL)와 COALESCE는 항상 서로 호환되지 않습니다. 그것은 그것의 더 나은 다른 통해 하나를 사용할 때 알기 위해 자신의 차이를 알고 가치 :

    위의 표는 Itzik 벤 웨이 코 뮤니시 작성한 거래-SQL 책 시험 참조 70-761 쿼리 데이터에서 ISNULL과 유착의 비교입니다.

  7. ==============================

    7.하나의 널 (null) 상태가 발생했을 경우, ISNULL은 적은 오버 헤드 것입니다. 차이는 있지만, 아마도 무시할 수있다.

    하나의 널 (null) 상태가 발생했을 경우, ISNULL은 적은 오버 헤드 것입니다. 차이는 있지만, 아마도 무시할 수있다.

  8. ==============================

    8.이 설명은 ISNULL 대 명확한 대한 COALESCE을 제공합니다

    이 설명은 ISNULL 대 명확한 대한 COALESCE을 제공합니다

    SQL의 COALESCE 함수는 인수 중 첫 번째 NULL이 아닌 식을 반환합니다. 다음과 같이 COALESCE의 구문은 다음과 같습니다

     COALESCE ("expression 1", "expressions 2", ...)
    

    그것은 다음과 같은 CASE 문과 동일합니다 :

    SELECT CASE ("column_name")
      WHEN "expression 1 is not NULL" THEN "expression 1"
      WHEN "expression 2 is not NULL" THEN "expression 2"
      ...
      [ELSE "NULL"]
      END
    FROM "table_name";
    

    SQL 서버에서 ISNULL () 함수는 다른 값으로 NULL의 값을 대체하는 데 사용된다.

    select CountryName = ISNULL("columnname", 'INDIA') from Countries
    

    제 병합 창 ISNULL로서 (가) 우리의 목표 값과 NULL 값을 대체하는 데 사용되는 비 널 식.

    COALESCE는 ANSI 표준의 일부이며 거의 모든 데이터베이스에서 사용할 수 있습니다.

    ISNULL 브이 유착 사이에 결정할 때주의를 이륙이 있어야한다 매개 변수 :

    결과 :

    COALESCE longer name
    ISNULL   longe
    

    ISNULL 첫번째 인수의 데이터 형식이 걸리기 때문에 유착이 모든 요소를 ​​검사하여 최적를 선택하면서이 일어난다 (이 경우 VARCHAR (11))

    ISNULL가이를 확인 대 COALESCE 사이에 결정에 대한 자세한 설명은 : https://www.mssqltips.com/sqlservertip/2689/deciding-between-coalesce-and-isnull-in-sql-server/

  9. ==============================

    9.COALESCE 한 여러 표현을 사용할 수 있습니다, 그것은 예를 들어 ... 먼저 null는 아니고, 발생하는 값을 반환합니다

    COALESCE 한 여러 표현을 사용할 수 있습니다, 그것은 예를 들어 ... 먼저 null는 아니고, 발생하는 값을 반환합니다

    DECLARE @Value1 INT, @Value2 INT, @Value3 INT, @Value4 INT
    SELECT @Value2 = 2, @Value4 = 4
    SELECT COALESCE(@Value1, @Value2, @Value3, @Value4)
    SELECT COALESCE(@Value1, @Value4, @Value3, @Value2)
    

    그리고 ISNULL에서 발현는 null 제공하는 두 번째 매개 변수를 반환하는 경우, 물론 당신은 하나 개의 표현만을 확인하실 수 있습니다 ...

    찾는 검사의 여러 표현이 그들 가운데 첫째하지 널 (null)을 선택하고 그렇다면, 그렇지 않으면 ISNULL 갈 유착을 사용

  10. from https://stackoverflow.com/questions/7408893/using-isnull-vs-using-coalesce-for-checking-a-specific-condition by cc-by-sa and MIT license