programing

"= null"과 "IS null"의 차이점은 무엇입니까?

kingscode 2022. 10. 2. 21:58
반응형

"= null"과 "IS null"의 차이점은 무엇입니까?

"=snowle"과 "IS NULL"의 차이점은 무엇입니까?그것들은 어떻게 다르게 사용됩니까?

WHERE조항,column=nullnull을 사용하는 것은 유효하지 않습니다.라고 말할 필요가 있습니다.column IS NULL또는column IS NOT NULL이것은 의 특수성을 말해준다.NULL이 값은 동일성을 확인하는 값이 아닙니다.알 수 없는 값이기 때문에IS또는IS NOT구문을 사용합니다.

어떤 것을 할당할 수 있습니다.NULL를 사용하여 값을 매김=등호화. 예:UPDATE TableX SET Column=NULL...

링크:
Wikipedia NLL (SQL)
w3schools SQL NULL 값
SQL 튜토리얼, "IS NULL Operator" 섹션을 참조하십시오.

  • "= NULL"은 값의 표현입니다.
  • "IS NULL"은 NULL인 변수의 상태를 평가하는 데 선호되는 방법입니다.

같은 질문에 대한 자세한 내용은 다음 링크를 참조하십시오.

http://www.sqlservercentral.com/articles/T-SQL/understandingthedifferencebetweenisnull/871/

사이트에 로그인하지 않고 기사를 읽을 수 있을지 모르기 때문에 이 기사의 발췌를 여기에 투고합니다.


"IS NULL"과 "= NULL"의 차이 이해

declare 스테이트먼트를 사용하여 SQL에서 변수를 생성하면 데이터 없이 생성되어 SQL 메모리 공간 내의 변수 테이블(vtable)에 저장됩니다.vtable에는 변수의 이름과 메모리 주소가 포함되어 있습니다.그러나 변수가 생성될 때 변수에 메모리 주소가 할당되지 않으므로 변수는 메모리로 정의되지 않습니다.

변수를 설정하면 메모리 주소가 할당되고 초기 데이터가 해당 주소에 저장됩니다.값을 다시 설정하면 변수가 가리키는 메모리 주소의 데이터가 새 값으로 변경됩니다.

그 차이에 대해서, 또 각자가 왜 그렇게 행동하는지 설명해 주세요.


"= 특수 절차"

= NULL는 가치의 표현입니다.즉, 변수가 설정되고 데이터 저장을 위해 메모리가 생성된 경우 값이 지정됩니다.변수는 개체의 데이터 값을 알 수 없음을 의미하는 NULL로 설정할 수 있습니다.값이 다음과 같이 설정되어 있는 경우:

DECLARE @val CHAR(4) 

SET @val = NULL

데이터 값을 알 수 없음으로 명시적으로 설정했을 때 다음과 같이 됩니다.

If @val = NULL

그것은 진정한 표현으로 평가될 것이다.

하지만 내가 할 수 있다면:

DECLARE @val CHAR(4)

If @val =  NULL

그것은 거짓으로 평가될 것이다.

그 이유는 @val 값으로 NULL을 확인하고 있기 때문입니다.@val 값을 설정하지 않았기 때문에 메모리주소가 할당되어 있지 않기 때문에 @val 값은 존재하지 않습니다.

주의: SQL 7과 2000의 디폴트 차이로 인해 예가 작동하지 않기 때문에 SET ANSI_NULLS(ON|OFF) 섹션을 참조하십시오.이는 SQL 7을 기반으로 합니다.


"IS는 특수한 절차입니다"

지금이다IS NULL는 조금 더 까다롭고 변수가 NULL인 상태를 평가하는 데 권장되는 방법입니다.IS NULL 구를 사용하면 변수 주소와 변수 내의 데이터가 모두 알 수 없는 것으로 확인됩니다.예를 들어, 다음과 같이 합니다.

DECLARE @val CHAR(4)

If @val IS NULL
            PRINT ‘TRUE’
ELSE
            PRINT ‘FALSE’


SET @val = NULL


If @val IS NULL

            PRINT ‘TRUE’

ELSE

            PRINT ‘FALSE’

두 출력 모두TRUE그 이유는 첫 번째에 있다.@valIS NULL 변수만 선언했으며 "IS NULL"을 확인할 데이터에 대한 주소 공간이 설정되지 않았습니다.그리고 두 번째 단계에서는 값이 명시적으로 NULL로 설정되고 "IS NULL"도 확인합니다.

ANSI_NULLS 설정(ON|OFF)

이제 내가 일을 좀 해볼게.이전 예에서는 값이 명시적으로 설정되어 있는 한 = NULL이 작동함을 확인할 수 있습니다.다만, ANSI_NULLS 를 ON 으로 설정하면, 동작은 조금 다릅니다.

예.

DECLARE @val CHAR(4)


SET @val = NULL


SET ANSI_NULLS ON


If @val =NULL

            PRINT ‘TRUE’

ELSE

            PRINT ‘FALSE’



SET ANSI_NULLS OFF


If @val =NULL

            PRINT ‘TRUE’

ELSE

            PRINT ‘FALSE’

SET ANSI_NULLS ON을 수행한 후 = NULL 문을 처음 실행하면 FALSE가 표시되고 OFF를 설정한 후에는 TRUE가 표시됩니다.이유는 다음과 같습니다.

SQL BOL 기사 'SET ANSI_NULLS'에서 발췌

SQL-92 표준에서는 null 값과 동등(=)하거나 같지 않은(<>) 비교를 FALSE로 평가해야 합니다.SET ANSI_NULLS가 ON인 경우 WHERE column_name = NULL을 사용하는 SELECT 문은 column_name에 null 값이 있더라도 0 행을 반환합니다.WHERE column_name <> NULL을 사용하는 SELECT 문은 column_name에 null이 아닌 값이 있더라도 0 행을 반환합니다.

SET ANSI_NULLS가 OFF인 경우 Equals(=) 및 Not Equal To(<>) 비교 연산자는 SQL-92 표준을 따르지 않습니다.WHERE column_name = NULL을 사용하는 SELECT 문은 값이 null인 행을 column_name으로 반환합니다.WHERE column_name <> NULL을 사용하는 SELECT 문은 컬럼 값이 null이 아닌 행을 반환합니다.또한 WHERE column_name <> XYZ_value를 사용하는 SELECT 문은 XYZ 값이 아닌 행과 NULL이 아닌 행을 모두 반환합니다.

End of Excerpt

So as defined by SQL92, “= NULL” should always evaluate false. So even setting the value explicitly means you will never meet the = NULL if condition and your code may not work as intended. The biggest reason where = NULL will shoot you in the foot is this, SQL 7 when shipped and installed is defaulted to ANSI_NULL OFF but SQL 2000 is defaulted to ANSI_NULL ON. Of course you can alter this several ways but if you upgraded a database from 7 to 2000 and found the = NULL worked only when you set if explicitly when you roll out a default 2000 server your code now breaks and can cause data issues.

Yet another reason to use IS NULL instead as under SQL 92 guidelines it is still going to evaluate to TRUE and thus your code is safer for upgrading the server.


Summary

If summary unless you need to check that the value of a variable was set to equal NULL and you have set ANSI_NULLS ON, then always use the “IS NULL” clause to validate if a variable is NULL. By using = NULL instead you can cause yourself a lot of headaches in trying to troubleshoot issues that may arise from it, now or unexpectedly in the future.

Basis

Some of the information provided comes from how C++ works and how SQL behaves under each circumstance. Unfortunately, SQL as far as I know does not have an addressof function to allow me to output the actual memory address to show what occurs under the hood. In C++ when a variable is created the variable has an address of 0xddddddd (in debug but it can be different non-real addresses as well). When you set the variable the first time checking the address will give you a valid memory address where the data is being stored. Also, more information can be obtained from SQL Books Online in the sections on IS NULL and SET ANSI_NULLS….

= NULL is used for assignment to a NULL value whereas IS NULL is used to determine whether a variable is NULL-valued.

Example of sssignment to NULL:

Update TableName Set ColumnName = NULL

Example of comparison to a NULL value in a conditional clause (link):

Select * From TableName Where ColumnName is NULL

ColumnName IS NOT Null can also be used to make sure a value is non-NULL.

= NULL은 NULL 값으로 할당하는 데 사용되는 반면 IS NULL은 변수가 NULL 값인지 여부를 결정하는 데 사용됩니다.

언급URL : https://stackoverflow.com/questions/2749044/whats-the-difference-between-null-and-is-null

반응형