ISNULL()、NVL()、IFNULL()、または COALESCE() と同等の SQLite

Junaid Khan 2023年6月21日
  1. SQLite データベースで NULL 値を持つレコードをフェッチする
  2. THENELSE を使用して、SQLite データベースの NULL 値を確認する
  3. SQLite データベースで COALESCE() 関数を使用する
  4. SQLite データベースで NVL() 関数を使用する
  5. COALESCE() 関数と ifnull() 関数の違い
  6. COALESCE() 関数と isnull() 関数の違い
ISNULL()、NVL()、IFNULL()、または COALESCE() と同等の SQLite

SQLite は、データベースからレコードを作成、読み取り、更新、および削除するために使用されます。 データベースには、データを維持するためのさまざまなテーブルが含まれています。

各テーブルは、レコードを保持する行と列で構成されます。 これらのレコードには多くの場合、空または null の値が含まれているため、データの取得中に問題やエラーが発生します。

SQLite データベースで NULL 値を持つレコードをフェッチする

SQLite データベースからレコードを取得するには、SQLite ステートメントで SELECT 句を使用します。 SELECT ステートメントも NULL 値をフェッチして無視し、値のみを持つレコードをフェッチします。

SELECT field
FROM table
WHERE field = aCondition

テーブル内に空の値があると問題が発生します。 SELECT ステートメントでは、空の値を持つレコードに対応するために、指定されたテキストで空の値を記録または埋めるために、NULL チェックが必要です。

SELECT field, [isnull](field, '')
FROM table
WHERE field = aCondition

上記のステートメントでは、NULL 値は isnull() 関数を認識できない場合があります。 この問題に対処するために、isnull() 関数と同様の関数である ifnull() 関数があります。

ifnull() 関数の完全な構文は次のとおりです。

ifnull() 関数の構文:

ifnull(column, alternateValue)

パラメーター:

column SQLite データベースのターゲット列。
alternateValue 戻り値が null または空の場合に選択された値。

以下のステートメントでは、ifnull() 関数を SELECT ステートメントと共に使用しています。 最初のステートメントは、すべての NULL 値をレコードから削除し、それらを空の文字列に置き換えます。

データベース レコードの NULL 値の代わりに任意の値を追加できます。 これは、SQLite データベースで NULL 値が This is a NULL 文字列値に置き換えられた 2 番目のステートメントで示されます。

ifnull() 関数は正確に 2つの引数を取り、指定された引数が両方とも NULL の場合は、最初の空でない文字列またはテキスト、または NULL を返します。

SELECT ifnull(NameofColumn,'')
SELECT ifnull(NULL,'This is a NULL');

THENELSE を使用して、SQLite データベースの NULL 値を確認する

または、最初のシナリオが条件に合わない場合は、条件文 IS NULL を使用して、テーブル内の空の値をチェックできます。

以下の SQLite ステートメントは、ISNULL(fieldName, 0) コマンドと同等です。 IS NULL 句は、データベース内のすべての空の値を返します。

値が見つかった場合、THEN は空の値を 0 値に置き換えます。何かが見つかった場合 (空でない場合)、ELSE は値を変更しません。

SELECT fieldName FROM NameOfTable WHERE fieldName IS NULL THEN 0 ELSE fieldName END

SQLite データベースで COALESCE() 関数を使用する

ifnull() 関数と同様に、COALESCE() 関数は、指定された値が NULL である列の値に代替値を提供します。 COALESCE() 関数で null 値をチェックする SQLite ステートメントを作成するには、指定されたテーブルのステートメントを作成します。

関数 COALESCE() は SQLite バージョン 3.8.6 以降で動作します。

ID
1 200
2 13
3 ヌル
4 30
5 512
SELECT COALESCE(Quantity, 0) AS Inventory
FROM Product;

更新されたテーブル出力:

ID
1 200
2 13
3 0
4 30
5 512

SQLite データベースで NVL() 関数を使用する

COALESCE() 関数と同様に、NVL() 関数も同じことを行います。 データベース内の空の値をチェックし、NVL() 関数で指定された別の値に置き換えます。

違いは、isnull() 関数が SQL サーバーの Oracle 関数である NVL() 関数に置き換えられたことです。

COALESCE() 関数と ifnull() 関数の違い

COALESCE() 関数と ifnull() 関数の主な違いは、ifnull() 関数が 2つの引数しかとらないことです。 第 1 引数が NULL かどうかをチェックし、NULL の場合は第 2 引数に置き換えます。

逆に、関数 COALESCE() は 2つ以上のパラメーターを取り、最初の引数が NULL かどうかをチェックします。 最初の引数が NULL の場合、2 番目の引数をチェックします。

2 番目の引数が NULL の場合、空でない値が見つかるまで次の引数をチェックし続け、それを最初の NULL 引数に置き換えます。

SELECT IFNULL('any value', 'extra value');
SELECT IFNULL(NULL,'extra value');

SELECT COALESCE(NULL, 'extra value');
SELECT COALESCE(NULL, 'any value', 'extra value');
SELECT COALESCE(NULL, NULL, NULL, NULL, 'the non-null value');

出力:

any value
extra value
extra value
some value
the non-null value

COALESCE() 関数と isnull() 関数の違い

主に、両方の関数は同じ機能を実行し、NULL 値をチェックして、指定された空でない値に置き換えます。 ただし、動作には違いがあります。

  1. 違いは、isnull() 関数は 1 回だけ評価されるのに対し、COALESCE() 関数は複数回評価されることです。
  2. もう 1つの違いは、データ型を決定する際に、関数 isnull() が最初の引数のデータ型を使用するのに対し、COALESCE() 関数は CASE 式ルールを使用し、最も優先度の高いデータ型を取ることです。 .
  3. 最後の違いは、関数 isnull()NULL 値を返さないことです。この関数の結果は常に非 Nullable であると想定しています。 COALESCE() 関数は NULL 式を返すことができます。

例 1:

CREATE TABLE example
(
  column1 INTEGER NULL,
  column2 AS COALESCE(column1, 0) PRIMARY KEY,
  column3 AS ISNULL(column1, 0)
);

出力:

# the statement fails as the nullability of the COALESCE function evaluates to NULL

Error: PRIMARY KEY cannot accept NULL values

例 2:

CREATE TABLE example
(
  column1 INTEGER NULL,
  column2 AS COALESCE(column1, 0),
  column3 AS ISNULL(col1umn, 0) PRIMARY KEY
);

出力:

# the above statement works as the nullability of the ISNULL function evaluates as NOT NULL.

No error
著者: Junaid Khan
Junaid Khan avatar Junaid Khan avatar

Hi, I'm Junaid. I am a freelance software developer and a content writer. For the last 3 years, I have been working and coding with Python. Additionally, I have a huge interest in developing native and hybrid mobile applications.

LinkedIn