sql >> データベース >  >> NoSQL >> MongoDB

SQL COALESCE()の説明

    ほとんどの主要なRDBMSは、COALESCE()をサポートしています。 演算子。引数のリストから最初のnull以外の値を返します。

    COALESCE() はSQL標準機能です(ISO / IEC 9075仕様に含まれています)。

    構文

    構文は次のようになります:

    COALESCE (V1, V2, ..., Vn)

    したがって、少なくとも1つの引数が必要ですが、複数の引数を指定できます(通常は提供されます)。

    COALESCE() nと見なされます -adic演算子。つまり、オペランドの数が可変である演算子です(つまり、 n オペランド)。

    簡単な例を次に示します。

    SELECT COALESCE(null, 'Papaya', 'Salad');

    結果:

    Papaya

    この場合、Papaya null以外の最初の値であるため、COALESCE() その値を返しました。

    Salad null以外の値でもありましたが、Papayaの後にありました そのため、返送されませんでした。

    COALESCE() vs CASE

    COALESCE() 通常、CASEの構文上のショートカットと見なされます 表現。

    そのため、次のステートメント:

    COALESCE (V1, V2) 

    と同等です:

    CASE WHEN V1 IS NOT NULL THEN V1 ELSE V2 END

    そして次のステートメント:

    COALESCE (V1, V2, ..., Vn)

    (n≥3の場合)次と同等です:

    CASE WHEN V1 IS NOT NULL THEN V1 ELSE COALESCE (V2, ..., Vn) END

    すべての値がNullの場合

    すべての値がnullの場合 、COALESCE() nullを返します :

    SELECT COALESCE( null, null );

    結果:

    null

    RDBMSによっては、null値の実際の出力が異なる場合があります。たとえば、psql(PostgreSQLの場合)を使用する場合、null値が返されるたびにデフォルトで空の文字列が出力されます(ただし、これは変更できます)。 SQLiteでも同じです(これも変更できます)。

    SQL Serverで、すべての引数がnullの場合 、次に、null値の少なくとも1つは型指定されたnullである必要があります 。したがって、上記の例では実際にはエラーが発生します(すべてのnull引数がnullであるため) 定数)。

    表現

    COALESCE() 最初はnullと評価されない最初の式の現在の値を返します 。したがって、次のような式を渡すと、次のようになります。

    SELECT COALESCE( null, 3 * 5 );

    これを取得します:

    15

    データベースの例

    次のクエリを実行するとします。

    SELECT
      name,
      salary
    FROM employee;

    そして、次の結果が得られます:

     name  | salary 
    -------+--------
     Elise | 100000
     Rohit |  50000
     Homer |   null

    DOBの最後の行にnull値があることがわかります 桁。

    null値を別の値に置き換えたい場合は、COALESCE()を使用できます。 次のように:

    SELECT
      name,
      COALESCE(salary, 0) AS salary
    FROM employee;

    結果:

     name  | salary 
    -------+--------
     Elise | 100000
     Rohit |  50000
     Homer |      0

    この場合、すべてのnull値を整数0に置き換えました。 。

    RDBMS間の違い

    一般的に、COALESCE() RDBMS間でほぼ同じように機能します。

    ただし、いくつかの違いがあります。

    データ型

    MySQL、MariaDB、SQLiteでは次のことができます:

    SELECT
      name,
      COALESCE(salary, 'None') AS salary
    FROM employee;

    結果:

    name	salary
    -----   ------
    Elise	100000
    Rohit	50000
    Homer	None

    この場合、salary 列にnull値が含まれ、出力はNone

    ただし、そのクエリは、SQL Server、PostgreSQL、またはOracleデータベースで問題を引き起こす可能性があります。

    SQL Server、PostgreSQL、およびOracle Databaseでそのクエリを実行すると、代替値が間違ったデータ型であるためにエラーが発生します。

    上記のクエリを実行すると、SQLServerから返される内容は次のとおりです。

    Msg 245, Level 16, State 1, Line 15
    Conversion failed when converting the varchar value 'None' to data type int.

    PostgreSQLが返すものは次のとおりです:

    ERROR:  invalid input syntax for type integer: "None"
    LINE 3:   COALESCE(salary, 'None') AS salary
                               ^

    そして、OracleDatabaseが返すものは次のとおりです。

    ORA-00932: inconsistent datatypes: expected NUMBER got CHAR

    ただし、数値を使用してもエラーは発生しません:

    SELECT
      name,
      COALESCE(salary, 0) AS salary
    FROM employee;

    結果:

     name  | salary 
    -------+--------
     Elise | 100000
     Rohit |  50000
     Homer |      0

    したがって、この最後の例は、上記の6つのRDBMSすべてで機能します。

    ヌル引数

    RDBMSがCOALESCE()を処理する方法のもう1つの違い null引数を処理する方法にあります。

    前述のように、SQL Serverでは、すべての引数がnullの場合 、次に、null値の少なくとも1つは型指定されたnullである必要があります 。つまり、COALESCE()へのすべての引数が がnull定数の場合、エラーが発生します。これは他のRDBMSには当てはまりません。この場合、すべての引数をnull定数にすることができ、出力はnullになります。 エラーの代わりに。


    1. dockerizedmongoでデータを初期化します

    2. MongoDB配列を$typeと一致させますか?

    3. MongoDBでJSONを使用していますか?

    4. MongoDBを使用して配列から特定のアイテムを削除する