다음을 통해 공유


=(같음)(Transact-SQL)

적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW) Microsoft Fabric의 SQL 분석 엔드포인트 Microsoft Fabric의 웨어하우스

SQL Server에서 두 식이 같은지 비교합니다(비교 연산자).

Transact-SQL 구문 표기 규칙

구문

expression = expression  

인수

expression
유효한 입니다. 두 식의 데이터 형식이 같지 않은 경우 한 식의 데이터 형식을 다른 식의 데이터 형식으로 암시적인 변환이 가능해야 합니다. 변환은 데이터 형식 우선 순위 규칙을 기반으로 합니다.

결과 형식

부울

설명

NULL 식을 사용하여 비교하는 경우 결과는 ANSI_NULLS 설정에 따라 다음과 같이 달라집니다.

  • ANSI_NULLS이 ON으로 설정된 경우 NULL은 알 수 없는 값이며 다른 Null을 포함한 다른 모든 값과 비교할 수 없다는 ANSI 규칙에 따라 NULL과 비교 결과는 UNKNOWN입니다.

  • ANSI_NULLS이 OFF로 설정된 경우 NULL과 NULL을 비교한 결과는 TRUE이고 다른 값과 NULL을 비교한 결과는 FALSE입니다.

자세한 내용은 SET ANSI_NULLS(Transact-SQL)를 참조하세요.

결과적으로 UNKNOWN이 되는 부울 식은 모두는 아니지만 대부분의 경우 비슷하게 FALSE로 동작합니다. 자세한 내용은 NULL 및 UNKNOWN(Transact-SQL)NOT(Transact-SQL)을 참조하세요.

A. 간단한 쿼리에서 = 사용

다음 예에서는 Equals 연산자(=)를 사용하여 HumanResources.Department 열의 값이 'Manufacturing' 단어와 같은 GroupName 테이블의 모든 행을 반환합니다.

-- Uses AdventureWorks  
  
SELECT DepartmentID, Name  
FROM HumanResources.Department  
WHERE GroupName = 'Manufacturing';  

결과 집합은 다음과 같습니다.

  
DepartmentID Name  
------------ --------------------------------------------------  
7            Production  
8            Production Control  
  
(2 row(s) affected)  
  

B. NULL 값과 NULL이 아닌 값 비교

다음 예에서는 Equals(=)와 Not Equal To(<>) 비교 연산자를 사용하여 테이블의 NULL 및 Null이 아닌 값에 비교를 수행합니다. 또한 IS NULLSET ANSI_NULLS 설정의 영향을 받지 않는다는 것을 보여 줍니다.

-- Create table t1 and insert 3 rows.  
CREATE TABLE dbo.t1 (a INT NULL);  
INSERT INTO dbo.t1 VALUES (NULL),(0),(1);  
GO  
  
-- Print message and perform SELECT statements.  
PRINT 'Testing default setting';  
DECLARE @varname int;   
SET @varname = NULL;  
  
SELECT a  
FROM t1   
WHERE a = @varname;  
  
SELECT a   
FROM t1   
WHERE a <> @varname;  
  
SELECT a   
FROM t1   
WHERE a IS NULL;  
GO  
  
-- SET ANSI_NULLS to ON and test.  
PRINT 'Testing ANSI_NULLS ON';  
SET ANSI_NULLS ON;  
GO  
DECLARE @varname int;  
SET @varname = NULL  
  
SELECT a   
FROM t1   
WHERE a = @varname;  
  
SELECT a   
FROM t1   
WHERE a <> @varname;  
  
SELECT a   
FROM t1   
WHERE a IS NULL;  
GO  
  
-- SET ANSI_NULLS to OFF and test.  
PRINT 'Testing SET ANSI_NULLS OFF';  
SET ANSI_NULLS OFF;  
GO  
DECLARE @varname int;  
SET @varname = NULL;  
SELECT a   
FROM t1   
WHERE a = @varname;  
  
SELECT a   
FROM t1   
WHERE a <> @varname;  
  
SELECT a   
FROM t1   
WHERE a IS NULL;  
GO  
  
-- Drop table t1.  
DROP TABLE dbo.t1;  

결과 집합은 다음과 같습니다.

Testing default setting  
a  
-----------  
NULL  
  
(1 row(s) affected)  
  
a  
-----------  
0  
1  
  
(2 row(s) affected)  
  
a  
-----------  
NULL  
  
(1 row(s) affected)  
  
Testing ANSI_NULLS ON  
a  
-----------  
  
(0 row(s) affected)  
  
a  
-----------  
  
(0 row(s) affected)  
  
a  
-----------  
NULL  
  
(1 row(s) affected)  
  
Testing SET ANSI_NULLS OFF  
a  
-----------  
NULL  
  
(1 row(s) affected)  
  
a  
-----------  
0  
1  
  
(2 row(s) affected)  
  
a  
-----------  
NULL  
  
(1 row(s) affected)  
  

참고 항목

데이터 형식(Transact-SQL)
식(Transact-SQL)
연산자(Transact-SQL)