比較演算子は、ほとんどのプログラミング言語の重要な部分です。
比較演算子は、2つの式を比較するために使用されます。結果はtrue
のいずれかです またはfalse
。それも不明である可能性があります。これは、 1
のいずれかで表すこともできます。 、 0
、または NULL
、言語によって異なります。これらは通常、「ブール式」と呼ばれます。
データベースで使用する場合、SQLクエリ内で比較演算子を使用して、データを特定の基準にフィルタリングできます。
一般的な比較演算子
ほとんどのプログラミング言語は、次の比較演算子を何らかの形でサポートしています。
OPERATOR | 意味 |
---|---|
= | 等しい |
> | より大きい |
< | 未満 |
> = | 以上 |
<= | 以下 |
<> | 等しくない |
SQLは、上記の表にリストされているものと同じ構文を使用します。
一部の言語では、代入演算子との混同を避けるために、異なる構文を使用しています。たとえば、PythonとJavaScriptは ==
を使用します =
の代わりに 。一方、ColdFusionは eq
を使用します 。
さまざまなデータ型
一部の言語には、両方の値が同じデータ型でなければならないことを指定するための特別な演算子があります。
たとえば、JavaScriptには ===
も含まれています 両方の値がとに等しいことを指定する演算子 それらは同じデータ型でなければなりません。ただし、データ型に関係がない場合は、 ==
を使用してください 代わりは。
例
演算子よりも大きい
これは、T-SQLクエリでGreaterThan演算子を使用する例です。
SELECT Name, Population
FROM country
WHERE Population > 100000000
ORDER BY Population DESC;
結果:
+--------------------+--------------+ | Name | Population | |--------------------+--------------| | China | 1277558000 | | India | 1013662000 | | United States | 278357000 | | Indonesia | 212107000 | | Brazil | 170115000 | | Pakistan | 156483000 | | Russian Federation | 146934000 | | Bangladesh | 129155000 | | Japan | 126714000 | | Nigeria | 111506000 | +--------------------+--------------+
この例では、Greater Than演算子(>
)を使用しました )人口が100000000を超える国のみを選択します。
演算子と等しい
これは別の例で、equals演算子(=
を使用しています。 )指定された値と完全に等しいデータを返します。
SELECT CountryCode, Name
FROM city
WHERE CountryCode = 'AFG'
結果:
+---------------+----------------+ | CountryCode | Name | |---------------+----------------| | AFG | Kabul | | AFG | Qandahar | | AFG | Herat | | AFG | Mazar-e-Sharif | +---------------+----------------+
この場合、国コードが AFG
と等しい都市のみを返します。 。
これは、比較演算子が数値データ型だけに限定されていないことを示しています。
日付
日付に比較演算子を使用することもできます。例:
SELECT * FROM Artists
WHERE ActiveFrom > '1990-01-01';
結果:
+------------+----------------+--------------+ | ArtistId | ArtistName | ActiveFrom | |------------+----------------+--------------| | 5 | Devin Townsend | 1993-01-01 | | 8 | Maroon 5 | 1994-01-01 | | 9 | The Script | 2001-01-01 | | 14 | Karnivool | 1997-01-01 | | 15 | Birds of Tokyo | 2004-01-01 | +------------+----------------+--------------+
ご覧のとおり、返される結果は、指定された日付より後(後)の結果のみです。
演算子以上
GreaterThanまたはEqualTo演算子を使用して、指定した日付を結果に含めることができます。
SELECT * FROM Artists
WHERE ActiveFrom >= '1990-01-01';
結果:
+------------+----------------+--------------+ | ArtistId | ArtistName | ActiveFrom | |------------+----------------+--------------| | 5 | Devin Townsend | 1993-01-01 | | 8 | Maroon 5 | 1994-01-01 | | 9 | The Script | 2001-01-01 | | 14 | Karnivool | 1997-01-01 | | 15 | Birds of Tokyo | 2004-01-01 | | 16 | Bodyjar | 1990-01-01 | +------------+----------------+--------------+
この場合、1行余分に返されます(最後の行)。
演算子未満
クエリを変更してLessThan演算子を使用すると、次のようになります。
SELECT * FROM Artists
WHERE ActiveFrom < '1990-01-01';
結果:
+------------+------------------------+--------------+ | ArtistId | ArtistName | ActiveFrom | |------------+------------------------+--------------| | 1 | Iron Maiden | 1975-12-25 | | 2 | AC/DC | 1973-01-11 | | 3 | Allan Holdsworth | 1969-01-01 | | 4 | Buddy Rich | 1919-01-01 | | 6 | Jim Reeves | 1948-01-01 | | 7 | Tom Jones | 1963-01-01 | | 10 | Lit | 1988-06-26 | | 11 | Black Sabbath | 1968-01-01 | | 12 | Michael Learns to Rock | 1988-03-15 | | 13 | Carabao | 1981-01-01 | +------------+------------------------+--------------+
指定された日付より前のすべての行を取得します。
NULL値の比較
NULL
比較演算子を使用する場合、値によって状況が少し複雑になる可能性があります。一言で言えば、環境がどのように構成されているかによって、異なる結果が得られる可能性があります。
たとえば、SQL Serverでは、Equals演算子( =
)を使用する場合 )または等しくない演算子( <>
) NULL
に対してテストします 、結果は ANSI_NULLS
によって異なります 設定(つまり、 ON
かどうか またはOFF
。
NULL
に対してテストするには 値の場合、SQLServerはIS NULL
も提供します ANSI_NULLS
に関係なく、一貫して機能する述語 設定。これには、 IS NOT NULL
も含まれます NULL
以外に対してテストするためのバリエーション 値。
以下は、私が何を意味するかを示す例です。
ANSI_NULLS ON
まず、 ANSI_NULLS
を設定します ON
へ 、次に NULL
に対していくつかのテストを実行します 。
SET ANSI_NULLS ON;
SELECT NULL
WHERE NULL = NULL;
SELECT NULL
WHERE 1 = NULL;
SELECT NULL
WHERE NULL IS NULL;
SELECT 'Not NULL'
WHERE 1 IS NOT NULL;
SELECT 'Not NULL'
WHERE 1 <> NULL;
結果:
(0 rows affected) (0 rows affected) +--------------------+ | (No column name) | |--------------------| | NULL | +--------------------+ (1 row affected) +--------------------+ | (No column name) | |--------------------| | Not NULL | +--------------------+ (1 row affected) (0 rows affected)
ANSI_NULLS OFF
次に、 ANSI_NULLS
を設定します OFF
へ 、次に同じテストを実行します。
SET ANSI_NULLS OFF;
SELECT NULL
WHERE NULL = NULL;
SELECT NULL
WHERE 1 = NULL;
SELECT NULL
WHERE NULL IS NULL;
SELECT 'Not NULL'
WHERE 1 IS NOT NULL;
SELECT 'Not NULL'
WHERE 1 <> NULL;
結果:
+--------------------+ | (No column name) | |--------------------| | NULL | +--------------------+ (1 row affected) (0 rows affected) +--------------------+ | (No column name) | |--------------------| | NULL | +--------------------+ (1 row affected) +--------------------+ | (No column name) | |--------------------| | Not NULL | +--------------------+ (1 row affected) +--------------------+ | (No column name) | |--------------------| | Not NULL | +--------------------+ (1 row affected)