programing

SQL - COALESCE와 ISNULL의 차이?

i4 2023. 7. 15. 09:41
반응형

SQL - COALESCE와 ISNULL의 차이?

COALESCE()와 ISNULL(,)의 실질적인 차이점은 무엇입니까?

SQL 연결에서 NULL 값을 피할 때 가장 적합한 것은 무엇입니까?

감사합니다!

COALESCE와 ISNULL 비교

ISNULL 함수와 COALESCE 표현식은 목적은 비슷하지만 다르게 동작할 수 있습니다.

  1. ISNULL은 함수이므로 한 번만 평가됩니다.위에서 설명한 대로 COALESCE 식의 입력 값은 여러 번 평가할 수 있습니다.

  2. 결과 식의 데이터 유형 결정이 다릅니다. ISNULL은 첫 번째 매개 변수의 데이터 유형을 사용하고 COALESCE는 CASE 식 규칙을 따르고 가장 높은 우선 순위를 가진 값의 데이터 유형을 반환합니다.

  3. 결과 식의 NULL 가능성은 ISNULL과 COALESCE에 대해 다릅니다.ISNULL 반환 값은 항상 NOT NULL로 간주되며(반환 값이 Null이 아닌 것으로 가정), Null이 아닌 매개 변수가 있는 COALESCE는 NULL로 간주됩니다.따라서 식 ISNULL(NULL, 1)과 COALESCE(NULL, 1)은 동일하지만 서로 다른 귀무성 값을 갖습니다.이렇게 하면 계산된 열에서 이러한 식을 사용하거나, 주요 제약 조건을 만들거나, 다음 예제와 같이 인덱싱할 수 있도록 스칼라 UDF의 반환 값을 결정론적으로 만드는 경우에 차이가 생깁니다.

    USE tempdb; 
    GO
    
    -- This statement fails because the PRIMARY KEY cannot accept NULL values
    -- and the nullability of the COALESCE expression for col2 
    -- evaluates to NULL. 
    
    CREATE TABLE #Demo  (  col1 integer NULL,  col2 AS COALESCE(col1, 0) PRIMARY KEY,  col3 AS ISNULL(col1, 0)  ); 
    
    -- This statement succeeds because the nullability of the 
    -- ISNULL function evaluates AS NOT NULL.
    
    CREATE TABLE #Demo  (  col1 integer NULL,  col2 AS COALESCE(col1, 0), col3 AS ISNULL(col1, 0) PRIMARY KEY  );
    

ISNULL과 COALESCE에 대한 검증도 다릅니다.예를 들어 ISNULL의 NULL 값은 int로 변환되는 반면 COALESCE의 경우 데이터 유형을 제공해야 합니다.ISNULL은 2개의 파라미터만 사용하는 반면 COALESCE는 가변 개수의 파라미터를 사용합니다.

출처: BOL

가장 큰 차이점은COALESCEANSI-Standard이므로 다른 RDBMS에서도 찾을 수 있습니다. 다른 차이점은 확인할 값의 전체 목록을 제공할 수 있다는 것입니다.COALESCE반면에ISNULL당신은 하나만 통과할 수 있습니다.

왜냐면ISNULL는 함수이며, 한 번만 평가됩니다.위에서 설명한 바와 같이, 입력 값은COALESCE식을 여러 번 평가할 수 있습니다. COALESCE기본적으로 다음과 같습니다.CASE과 현과표ISNULL는 데이터베이스 엔진에 구현된 기본 제공됩니다.

MSDN

COALESCE()는 여러 수 , 이 중이 아닐 됩니다. 를 들어, null은 null과 같습니다.COALESCE(Col1, Col2, Col3, 'N/A')이것은 MS에서 사용하는 것이 좋습니다.ISNULL()

ISNULL()하나의 입력만 가질 수 있지만 COALESCE보다 약간 빠른 것으로 나타났습니다.

언급URL : https://stackoverflow.com/questions/18828641/sql-difference-between-coalesce-and-isnull

반응형