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

SQLiteで計算列を作成する方法

    生成された列のサポートは、2020年1月22日にリリースされたバージョン3.31.0でSQLiteに追加されました。

    生成された列と計算された列は同じものです。これらは、値が同じ行の他の列の関数である列です。

    SQLiteでは、生成された列はGENERATED ALWAYSを使用して作成されます テーブルを作成または変更するときの列の制約。

    生成される列には2つのタイプがあります。 STORED およびVIRTUALVIRTUALのみ テーブルを変更するときに列を追加できます。テーブルを作成するときに両方のタイプを追加できます。

    実例を示します。

    CREATE TABLE Products( 
        Id INTEGER PRIMARY KEY, 
        Name TEXT,
        Qty INT,
        Price INT,
        TotalValue INT GENERATED ALWAYS AS (Qty * Price)
    );

    次のエラーが発生した場合:

    Error: near "AS": syntax error

    たぶん、SQLiteの新しいバージョンにアップグレードする必要があります。生成された列はSQLite3.31.0でのみ導入されました。

    次に、データを挿入して選択します。

    INSERT INTO Products VALUES 
      (1, 'Hammer', 10, 9.99),
      (2, 'Saw', 5, 11.34),
      (3, 'Wrench', 7, 37.00),
      (4, 'Chisel', 9, 23.00),
      (5, 'Bandage', 70, 120.00);
    
    SELECT * FROM Products;

    結果:

    Id     Name        Qty    Price   TotalValue
    -----  ----------  -----  ------  ----------
    1      Hammer      10     9.99    99.9      
    2      Saw         5      11.34   56.7      
    3      Wrench      7      37      259       
    4      Chisel      9      23      207       
    5      Bandage     70     120     8400      

    これは単純な例であり、組み込み関数を使用する式など、より複雑な式を使用することもできます。

    仮想vs保存

    デフォルトでは、計算列はVIRTUALとして作成されます 桁。

    STOREDを作成するオプションもあります 列。

    VIRTUALの値 列は読み取り時に計算されますが、STOREDの値は 列は、行が書き込まれるときに計算されます。

    VIRTUALを明示的に使用できます またはSTORED 列の定義で、どちらにするかを示します。これを省略すると、VIRTUALになります。 。

    STOREDを使用するように前の例を変更する方法は次のとおりです。 列。

    CREATE TABLE Products( 
        Id INTEGER PRIMARY KEY, 
        Name TEXT,
        Qty INT,
        Price INT,
        TotalValue INT GENERATED ALWAYS AS (Qty * Price) STORED
    );

    STOREDであるかどうかに関係なく 列またはVIRTUAL 、データの入力と選択はまったく同じです。

    INSERT INTO Products VALUES 
      (1, 'Hammer', 10, 9.99),
      (2, 'Saw', 5, 11.34),
      (3, 'Wrench', 7, 37.00),
      (4, 'Chisel', 9, 23.00),
      (5, 'Bandage', 70, 120.00);
    
    SELECT * FROM Products;

    結果:

    Id     Name        Qty    Price   TotalValue
    -----  ----------  -----  ------  ----------
    1      Hammer      10     9.99    99.9      
    2      Saw         5      11.34   56.7      
    3      Wrench      7      37      259       
    4      Chisel      9      23      207       
    5      Bandage     70     120     8400      

    生成された列のデータを更新する

    計算列のデータを直接更新することはできません。つまり、計算列自体に直接書き込むことはできません。

    データを更新するには、計算列の式で使用される基になる列のデータを更新する必要があります。

    前の例で使用したデータを更新する例を次に示します。

    UPDATE Products 
    SET Qty = 5 WHERE Id = 1;
    
    SELECT * FROM Products;

    結果:

    Id     Name        Qty    Price   TotalValue
    -----  ----------  -----  ------  ----------
    1      Hammer      5      9.99    49.95     
    2      Saw         5      11.34   56.7      
    3      Wrench      7      37      259       
    4      Chisel      9      23      207       
    5      Bandage     70     120     8400      

    この場合、使用可能なハンマーの数を5に減らしました。これにより、在庫のハンマーの合計値と生成された列の値( TotalValue )が減少しました。 )99.99から49.95に減少しました。


    1. Vertabeloを使用したデータベース設計

    2. バックエンドデータベースが非同期的に変更されたときにJPAエンティティを更新するにはどうすればよいですか?

    3. MongoクラスターをSSLで保護する

    4. SQLクエリから変数を設定するにはどうすればよいですか?