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

SQLServerのテーブル値関数を介してデータを選択する

    SELECT ステートメントは、おそらくSQLServerで最も一般的に使用されるステートメントです。ほとんどの場合、このステートメントはビューに対して実行されるか、テーブルに対して直接実行されて、表形式のデータの行を取得します。

    ただし、SELECTを実行できるオブジェクトはビューとテーブルだけではありません。 上の声明。 SELECT ステートメントは、行セット関数、OPENXML、ユーザー定義関数などの他のオブジェクトでも使用できます。

    この記事では、テーブル値関数を使用してデータを選択する例を示します。

    例1-基本機能

    これは、インラインのテーブル値関数を介してテーブルから基本データを選択するクイック関数です。

    SELECT * FROM udf_Cats_ITVF();
    

    結果:

    +---------+-----------+------------+
    | CatId   | CatName   | Phone      |
    |---------+-----------+------------|
    | 1       | Garfield  | 9871237654 |
    | 2       | Felix     | 8871237651 |
    | 3       | Tom       | 7871237652 |
    | 4       | Fetch     | 6871237653 |
    +---------+-----------+------------+
    

    関数は次のようになります:

    CREATE FUNCTION dbo.udf_Cats_ITVF()
        RETURNS TABLE
    AS
    RETURN (
        SELECT 
            CatId,
            CatName,
            Phone
        FROM dbo.Cats
        );
    GO
    

    この関数は、テーブルからすべての行を選択するだけです。引数は必要ありません。

    特定の猫を選択したい場合は、WHEREを追加する必要があります 条項。

    SELECT * FROM udf_Cats_ITVF()
    WHERE CatName = 'Fetch';
    

    結果:

    +---------+-----------+------------+
    | CatId   | CatName   | Phone      |
    |---------+-----------+------------|
    | 4       | Fetch     | 6871237653 |
    +---------+-----------+------------+
    

    ここで認めなければならないのは、テーブルから直接データを選択することもできたので、この関数は一種の不要なものです。または、その仕事をするためのビューを作成することもできます。ただし、ユーザー定義関数には、テーブルとビューにはない利点があります。パラメーターです。

    例2–パラメーターを使用した関数

    テーブル値関数の利点の1つは、パラメーターをサポートすることです。これは、関数がもう少し便利になるところです。テーブル値関数は、ビューと同じように動作しますが、パラメーターを許可する機能が追加されているため、「パラメーター化されたビュー」と呼ばれるものもあります。

    したがって、猫の名前の引数を受け入れるために、前の関数のバリエーションを作成できます。

    SELECT * FROM udf_CatsByName_ITVF('Fetch');
    

    結果:

    +---------+-----------+------------+
    | CatId   | CatName   | Phone      |
    |---------+-----------+------------|
    | 4       | Fetch     | 6871237653 |
    +---------+-----------+------------+
    

    新しい関数は次のようになります:

    CREATE FUNCTION dbo.udf_CatsByName_ITVF( @CatName varchar(70) )
        RETURNS TABLE
    AS
    RETURN (
        SELECT 
            CatId,
            CatName,
            Phone
        FROM dbo.Cats
        WHERE CatName = @CatName
        );
    
    GO
    

    例3–結合

    テーブル値関数を結合に含めることができます。

    ここでは、特定のアーティストのすべてのアルバムを返すテーブル値関数からすべての列を選択します。

    SELECT * FROM ufn_AlbumsByArtist(1);
    

    結果:

    +------------+-------------------------+---------+
    | ArtistId   | AlbumName               | Genre   |
    |------------+-------------------------+---------|
    | 1          | Powerslave              | Rock    |
    | 1          | Somewhere in Time       | Rock    |
    | 1          | Piece of Mind           | Rock    |
    | 1          | Killers                 | Rock    |
    | 1          | No Prayer for the Dying | Rock    |
    +------------+-------------------------+---------+
    

    この関数の唯一の問題は、アーティスト名が返されないことです。アーティスト名が必要な場合は、そのデータを含むテーブルと結合する必要があります。この場合、アーティスト名を含むテーブルはArtistsと呼ばれます。 、次のようにクエリを変更できます:

    SELECT  
        ar.ArtistName,
        aba.AlbumName,
        aba.Genre
    FROM ufn_AlbumsByArtist(1) aba
    INNER JOIN Artists ar
    ON aba.ArtistId = ar.ArtistId;
    

    結果:

    +--------------+-------------------------+---------+
    | ArtistName   | AlbumName               | Genre   |
    |--------------+-------------------------+---------|
    | Iron Maiden  | Powerslave              | Rock    |
    | Iron Maiden  | Somewhere in Time       | Rock    |
    | Iron Maiden  | Piece of Mind           | Rock    |
    | Iron Maiden  | Killers                 | Rock    |
    | Iron Maiden  | No Prayer for the Dying | Rock    |
    +--------------+-------------------------+---------+
    

    1. SQLServerのSelectQueryの列エイリアスを理解する-SQLServer/TSQLチュートリアルパート115

    2. SQLiteクエリ結果に列名を含める

    3. phpMyAdminでルートログインを無効にする

    4. SQLiteで既存のデータを更新する方法