[SQL] 특정 조건을 확인하기 위해 COALESCE를 사용하여 대 ISNULL을 사용하십니까?
SQL특정 조건을 확인하기 위해 COALESCE를 사용하여 대 ISNULL을 사용하십니까?
나는 여러 매개 변수가 유착에 전달 될 수 있다는 것을 알고 있지만까지로 할 때 당신은 기본값을 사용하거나 대신 사용 ISNULL에 더 나은 방법입니다 않는, 존재하지 않는 있는지 확인하기 위해 하나의 발현을 확인?
둘 사이에 어떤 성능 이득이 있습니까?
해결법
-
==============================
1.연결 Microsoft에보고 된이 문제는 COALESCE와 ISNULL 몇 가지 차이점을 보여준다 :
연결 Microsoft에보고 된이 문제는 COALESCE와 ISNULL 몇 가지 차이점을 보여준다 :
-
==============================
2.그럴 생각하지만, COALESCE는 SQL 92 표준보다 다른 데이터베이스에 의해 지원입니다. 당신이 휴대 갈 경우, ISNULL을 사용하지 마십시오.
그럴 생각하지만, COALESCE는 SQL 92 표준보다 다른 데이터베이스에 의해 지원입니다. 당신이 휴대 갈 경우, ISNULL을 사용하지 마십시오.
-
==============================
3.COALESCE에서는 ISNULL에서 당신이 단 하나 개의 표현을 확인할 수있는 여러 표현을 가질 수
COALESCE에서는 ISNULL에서 당신이 단 하나 개의 표현을 확인할 수있는 여러 표현을 가질 수
COALESCE ( expression [ ,...n ] ) ISNULL ( check_expression , replacement_value )
-
==============================
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.내가 명시 적으로 표시가 표시되지 않는 한 가지 중요한 점은 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.널 (NULL)와 COALESCE는 항상 서로 호환되지 않습니다. 그것은 그것의 더 나은 다른 통해 하나를 사용할 때 알기 위해 자신의 차이를 알고 가치 :
널 (NULL)와 COALESCE는 항상 서로 호환되지 않습니다. 그것은 그것의 더 나은 다른 통해 하나를 사용할 때 알기 위해 자신의 차이를 알고 가치 :
위의 표는 Itzik 벤 웨이 코 뮤니시 작성한 거래-SQL 책 시험 참조 70-761 쿼리 데이터에서 ISNULL과 유착의 비교입니다.
-
==============================
7.하나의 널 (null) 상태가 발생했을 경우, ISNULL은 적은 오버 헤드 것입니다. 차이는 있지만, 아마도 무시할 수있다.
하나의 널 (null) 상태가 발생했을 경우, ISNULL은 적은 오버 헤드 것입니다. 차이는 있지만, 아마도 무시할 수있다.
-
==============================
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.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 갈 유착을 사용
from https://stackoverflow.com/questions/7408893/using-isnull-vs-using-coalesce-for-checking-a-specific-condition by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] ON 대 WHERE 절 가입하여 (0) | 2020.04.02 |
---|---|
[SQL] MySQL의 쿼리에서 UNION과 LIMIT 작업을 결합 (0) | 2020.04.02 |
[SQL] MySQL의 피벗 / 크로스 탭 쿼리 (0) | 2020.04.02 |
[SQL] 어떻게 MDF 데이터베이스 파일에 연결합니까? (0) | 2020.04.02 |
[SQL] 텍스트 필드의 단어 수 통계를 결정하기 위해 SQL을 사용하여 (0) | 2020.04.02 |