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