ほとんどの主要な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になります。 エラーの代わりに。