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

初心者向けのSQLCOALESCE関数を使用したNULL値の効果的な処理

    この記事は、初心者がT-SQLCOALESCE関数の基本とNULL値を処理するためのそのアプリケーションを理解できるようにすることを目的としています。さらに、読者はこの関数のいくつかの簡単な例を実装することで実践的な経験を積むことができます。

    また、データベース分析の問題を解決する上でのT-SQL関数の重要性についても説明します。

    SQLCOALESCE関数について

    まず、SQL初心者の観点からこの関数を理解してみましょう。

    SQL COALESCE関数とは何ですか?

    これは、多くの入力を受け入れるが、NULLではない最初の入力値を返すT-SQL関数です。 。

    入力は何ですか?

    入力(引数とも呼ばれます)は、その関数がその仕事をするために必要な関数に提供されるものであれば何でもかまいません。

    例: SUM()という関数があります 、任意の2つの数値を追加します X およびY 。これらの数値は、関数の入力または引数です。

    入力または引数は式にすることができます。

    表現とは何ですか?

    式は、定数、変数、または最終的に単一のデータ値を返す列にすることができます。

    ただし、データベースの観点から、値が含まれる場合と含まれない場合がある列に特に焦点を当てています。

    Null値とは何ですか?

    テーブルの列にまだ割り当てられていない値は、 NULLです。 価値。つまり、 NULL テーブル内の列の初期化されていない値を意味します 。

    NOT NULL値とは何ですか?

    これは、NULL値の反対です。 NULL値が未割り当てまたは初期化されていない列値である場合、NOTNULL値は割り当て済みまたは初期化された列値です

    例: ExamIdの2つの列があります およびExamResult 、テーブル内。

    ユーザーがExamId=1を設定します 、ただし、 ExamResultには値を提供しません 桁。次に、 ExamResult NULLが含まれます。または、 ExamId NOT NULL 1なので値。

    COALESCE機能はどのように機能しますか?

    これは、列の最初のNOTNULL値を表示する関数です。 この関数に渡される列のリスト。ただし、テーブル列のリスト、単純な数値(定数)または変数のセットなど、任意の式のセットをこの関数に渡すことができます。

    構文

    COALESCE関数のSQL構文(Microsoftのドキュメントによる)は次のとおりです。

    COALESCE ( expression [ ,...n ] )   

    同じ型の式をいくつでも受け入れることができるように、式はすでに定義されています。

    互換性

    Microsoftのドキュメントによると、この関数は、次のような多くのMicrosoftSQLテクノロジと互換性があります。

    1. サポートされているすべてのバージョンのSQLServer。
    2. Azure SQLデータベース(SQL Serverクラウドバージョン)。

    コンテキストを単純にするために、他のいくつかのSQLServerテクノロジを意図的に除外していることに注意してください。

    COALESCE関数の簡単な例

    例を実行できるサンプルデータベースを設定しましょう。 「CoalesceDB」という新しいデータベースを作成して、それに対してサンプルを実行します。次のコードを使用します:

    -- Create sample database
    Create DATABASE CoalesceDB;
    GO

    「NULLの数値」の例

    数値とNULL値を任意の順序でCOALESCE関数に渡すと、最初のNOTNULL値であるため、数値が返されます。 。

    次のように、サンプルデータベースに対してT-SQLスクリプトを使用します。

    -- Use the sample database
    USE CoalesceDB
    
    -- Simple COALESCE example with number and NULL inputs (arguments) 
    SELECT COALESCE(NULL,1) as COALESCE_Result

    次の結果が得られるはずです:

    番号1が最初になり、NULLが2番目の引数になるように引数の順序を逆にすると、同じ結果が得られます。

    -- Simple COALESCE example with Number and NULL while number being first input (arguments) 
    SELECT COALESCE(1,NULL) as COALESCE_Result_Number_First

    「NULLの文字列」の例

    ここでは、文字列(文字型データ)とNULLをこの関数に渡して結果を確認します。次のスクリプトを実行します:

    -- Simple COALESCE example with string and NULL inputs (arguments) 
    SELECT COALESCE(NULL,'Second input') as COALESCE_Result

    結果は以下のとおりです。

    同様に、順序を逆にすると、前の例と同じ結果が得られます。

    「2つの数字と1つのNULL」の例

    この関数に2つの数値とNULL値を含む3つの入力(引数)を指定した場合のCOALESCE関数の動作を見てみましょう。

    2つの数値と1つのNULL値を使用して、次のスクリプトを実行します。

    -- Simple COALESCE example with two numbers and NULL inputs (arguments) 
    SELECT COALESCE(NULL,2,3) as COALESCE_Result

    出力は次のとおりです。

    最初以降 NOTNull値は2です 、COALESCE関数がそれを返し、その後の値を無視します。

    次のスクリプトを使用して、引数のリストの番号の順序を逆にしましょう。

    -- Simple COALESCE example with two numbers reversed and NULL inputs (arguments) 
    SELECT COALESCE(NULL,3,2) as COALESCE_Result 

    結果セットは以下のとおりです。

    「数値、文字列、およびNULL」の例

    ここでは、数値、文字列、およびNULL値を入力して、引数の型を混同します。次のコードを入力します:

    -- Simple COALESCE example with one number one string and NULL inputs (arguments) 
    SELECT COALESCE(NULL,1,'Home') as COALESCE_Result

    結果は次のとおりです。

    COALESCE関数は正しい結果を示しますが、最初のNOT NULL値である1を取得することは、良い例ではありません。同じタイプの引数を指定する必要があります。数字、文字、またはその他の種類の式です。

    最初の引数として文字列「Home」を指定し、2番目の引数として数値1を指定すると、エラーが発生します。そのため、式は同じタイプである必要があります。

    2つのNOTNULL引数を交換してこれを試してみましょう:

    -- Simple COALESCE example with one number one string first and NULL inputs (arguments) 
    SELECT COALESCE(NULL,'Home',1) as COALESCE_Result

    出力は以下のとおりです:

    「NULLの2つの文字列」の例

    NULL値の後に2つの文字列値を入力すると、NOT NULLであるため、最初の文字列が返されます。 2番目のものは除外されます。次のスクリプトを実行して、実際の動作を確認してください。

    -- Simple COALESCE example with two strings and NULL inputs (arguments) 
    SELECT COALESCE(NULL,'Home','Office') as COALESCE_Result

    結果セットは以下のとおりです。

    上記の例は、正確な結果を得るには、COALESCE関数に同じタイプの引数を指定する必要があることを証明しています。引数自体は、数値、文字列、変数、またはテーブルの列にすることができます。

    実際の例

    ここで、NULL値を効果的に処理するCOALESCE関数の単純な実際のシナリオを取り上げます。

    ITサービスプロバイダー企業は、顧客の詳細を次の2つのカテゴリに分類して保存します。

    1. ビジネス顧客。
    2. 個人のお客様。

    法人顧客とは、会社を代表する顧客です。彼らは会社(ビジネス)に代わって注文を出します。個々の顧客とは、個人的に、および個人的な使用ごとにサービスを注文する人のことです。

    ビジネス顧客の連絡先は、Work_Email列の下のCustomerテーブルにあります。個人顧客の電子メールアドレスは、表のPersonal_Email列にあります。

    したがって、タイプに応じて、顧客ごとにWork_Email列またはPersonal_Email列のいずれかが入力されます。

    顧客テーブルを作成する

    サンプルデータベースCoalesceDBに「Customer」というテーブルを作成します。次のスクリプトを入力します:

    -- Using the sample database
    Use CoalesceDB
    
    -- Create Customer table
    CREATE TABLE Customer
    (CustomerId INT IDENTITY(1,1),
    Work_Email VARCHAR(250) NULL,
    Personal_Email VARCHAR(250) NULL,
    CONSTRAINT [PK_Customer] PRIMARY KEY ([CustomerId]) 
    )

    顧客テーブルに入力

    次のスクリプトを使用して顧客テーブルにデータを入力しましょう:

    -- Using the sample database
    Use CoalesceDB
    
    -- Populate Customer table
    INSERT INTO Customer
    (Work_Email,Personal_Email)
    values
    ('[email protected]',NULL),
    (NULL,'[email protected]'),
    (NULL,'[email protected]'),
    ('[email protected]',NULL),
    ('[email protected]',NULL),
    (NULL,'[email protected]')
    
    -- Important: Please note the above email addresses are for demo purposes only

    顧客テーブルを表示する

    次のスクリプトを実行します:

    -- View customer table
    SELECT [CustomerId], [Work_Email], [Personal_Email] FROM dbo.Customer

    出力は次のとおりです。

    COALESCEを使用して利用可能なすべての連絡先を表示する

    ここで、NULLを無視して、すべての顧客の利用可能なすべての連絡先を確認したい場合は、次のようにCOALESCE関数を使用してこれを実現できます。

    --Viewing all available contacts using COALESCE 
    SELECT C.CustomerId,COALESCE(Work_Email,Personal_Email) AS Email
    FROM dbo.Customer C

    結果は次のとおりです。

    やるべきこと

    おめでとう! COALESCE関数の基本を理解し、NULL値を効果的に処理するためのCOALESCE関数の使用法を理解している。

    ここで、新しいスキルをさらにトレーニングすることをお勧めします:

    1. Customerテーブルにさらに2つの列、Work_PhoneとPersonal_Phoneを作成して入力してみてください。実際の例を使用して、これらの列のNULL値を処理できるかどうかを確認してください。
    2. SQLビューを作成して、顧客の利用可能なすべての電子メール連絡先を表示してみてください。
    3. 4つの列すべて(Work_Email、Personal_Email、Work_Phone、およびPersonal_Phone)を関数に渡してみてください。もちろん、それらがすべて同じデータ型であることを確認する必要があります。結果を自分で確認してください。

    また読む

    SQLCOALESCE関数の実用的な使用法

    SQLCOALESCE関数に関する5つの質問に対する上位の回答


    1. MySQLで連結文字列にセパレータを追加する方法– CONCAT_WS()

    2. lastInsertIdはPostgresqlでは機能しません

    3. PostgreSQL関数の言語sqlと言語plpgsqlの違い

    4. MSSQLをIRIWorkbenchに接続する