= (等しい) (Transact-SQL)
Applies to: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric の SQL 分析エンドポイント Microsoft Fabric のウェアハウス
SQL Server で 2 つの式の等価性を比較します (比較演算子)。
構文
expression = expression
引数
式 (expression)
任意の有効な式を指定します。 2 つの式のデータ型が異なる場合、1 つの式のデータ型がもう一方の式のデータ型に暗黙的に変換可能である必要があります。 変換は、データ型の優先順位のルールに基づいています。
戻り値の型
ブール型
解説
NULL 式を使用して比較した場合、結果は ANSI_NULLS
の設定に応じて以下のように異なります。
ANSI_NULLS
が ON に設定されている場合、NULL は不明な値であり、別の NULL を含む、他の値と比較できないという ANSI 規則に従って、NULL との比較結果が UNKNOWN となります。ANSI_NULLS
が OFF に設定されている場合、NULL 同士の比較結果は TRUE となり、NULL と他の値の比較結果は FALSE となります。
詳細については、「SET ANSI_NULLS (Transact-SQL)」を参照してください。
結果が UNKNOWN となるブール式は、ほとんどの場合、FALSE と同じように動作しますが、すべての場合ではありません。 詳細については、「NULL と UNKNOWN (Transact-SQL)」と「NOT (Transact-SQL)」を参照してください。
例
A. 簡単なクエリで = を使用する
次の例では、等号演算子を使用して、HumanResources.Department
テーブル内の GroupName
列の値が "Manufacturing" という単語と等しいすべての行を返します。
-- 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 以外の値を比較する
次の例では、=
(等号) 比較演算子と <>
(不等号) 比較演算子を使用して、テーブル内の NULL
値と NULL 以外の値を比較します。 例は IS NULL
が SET 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)