sql >> データベース >  >> RDS >> Database

比較演算子とは何ですか?

    比較演算子は、ほとんどのプログラミング言語の重要な部分です。

    比較演算子は、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)

    1. MariaDBの時間値から分を返す4つの関数

    2. MySQLに書き込むときにTextAreaからの改行を保持する

    3. TNSPINGはOKですが、sqlplusはORA-12154を提供しますか?

    4. Postgresのあるデータベースから別のデータベースにテーブルをコピーします