HOWTO · SQLite

SQLite の一時テーブル

この記事では、SQLite での一時テーブルの作成と使用について詳しく説明します。

このページの内容

一時テーブルは、SQLite で非常に便利です。 ただし、それらは使用するのが少しトリッキーであることが知られています。

この記事では、SQLite での一時テーブルの作成と使用について詳しく説明します。

SQLite で一時テーブルを作成する

SQLite で一時テーブルを作成するのは、思ったよりずっと簡単です。 これは、通常のテーブルを作成するのとよく似ています。 作成するコードを以下に示します。

まず、一時テーブルには作成済みのテーブルへの参照が必要になるため、通常のテーブルを作成する必要があります。

CREATE TABLE users
(
    users_id INTEGER,
    name TEXT,
    age INTEGER
);

この後、上記のユーザーのテーブルをコピーする一時テーブルを作成できます。

CREATE TEMPORARY TABLE table1
AS
(
SELECT * FROM users
);

これにより、ユーザーのテーブルと同じ一時テーブルが作成されます。 一時テーブルを作成する前に、それが最新のテーブルのコピーであることを確認できるように、いくつかの値を挿入することをお勧めします。これは、INSERT INTO 句を使用して実行できます。

より複雑なクエリを使用して、いつでもテーブルを作成できます。 AS 句の後の SELECT クエリを任意のクエリに置き換えるだけです。

完了すると、一時テーブルが作成され、使用できるようになります。 TEMP は TEMPORARY 句を置き換えることもでき、どちらも SQLite で受け入れられることに注意してください。

SQLite の一時テーブルから選択する

これで、作成がいかに簡単かがわかったので、そこからどのように選択できるか疑問に思うかもしれません。 通常の SELECT 句を同じように使用しますが、通常のテーブルまたは永続テーブルを選択するのとは少し異なるアプローチを選択することをお勧めします。

一時テーブルの AS 句を使用してエイリアスを追加することをお勧めします。 上記で定義した同じユーザー テーブルと対応する一時テーブルを使用した例を次に示します。

SELECT 'table1'
AS from_table,* FROM table1

これは、SELECT * FROM table1 も使用した場合に機能します。 ただし、一時テーブルのコンテンツと永続テーブルを区別できるように、この方法を使用することをお勧めします。

これは、複数のエントリを持つテーブルを扱うときに特に役立ちます。 アスタリスク記号 (*) を任意のクエリに置き換えることができることに注意してください。

With 句を使用する

あまり一般的ではないもう 1つの選択方法は、WITH 句です。 ただし、これは、select ステートメントを 1つだけ使用してクエリを作成する場合にのみ使用できます。

複雑なクエリを使用する場合は、前に説明した方法を使用することをお勧めします。 以下のコードを使用して、この方法を試すことができます。

WITH table1(users_id, name,age) AS
(
   --add any one select statement
)
SELECT users_id, name,age FROM table1;

set operatorgroupingordering などの他の句も、多くの場合、すべての一時テーブルで使用できます。 これらは、クエリが正しく記述されている限り正しく実行されるため、永続テーブルと同じように使用されます。

SQLite で一時テーブルを削除する

SQLite では、一時テーブルを削除することは、データベース内の通常のテーブルまたは永続テーブルを削除することに似ています。 ユーザーが特定のセッションを終了すると、一時テーブルは自動的に削除されることがよくありますが、必要に応じていつでも手動で削除できます。

データの損失を避けるために、永続テーブルを削除する前に、保存したいデータを永続テーブルに複製する必要があることに注意してください。 次のクエリは、一時テーブルを削除する方法を示しています。

DROP TABLE temp.table1

ここでの唯一の違いは、テーブルの名前の前に句が追加されていることです。 これは、ドロップする表が一時表であることを示しています。

一時テーブルを削除するときは、多くの場合、IF EXISTS 句を追加するのが最善です。 これは、知らないうちにテーブルが自動的に削除された可能性があるためです。

これを追加すると、長いコードで識別が困難なエラーを防ぐことができます。 次のコードを使用して、一時テーブルを削除します。

DROP TABLE If EXISTS temp.table1;

SQLite の一時テーブルでレコードを挿入、更新、および削除する

一時テーブル内のレコードの挿入、更新、および削除は、永続テーブルとほとんど同じです。 追加および編集されたすべてのデータは、ユーザーがセッションを終了した後、または有効期限が切れた場合に失われることに注意することが重要です。

前に作成した同じ一時テーブルを使用して、上記の 3つすべてについて参照できるいくつかの例を次に示します。

一時テーブルにレコードを挿入する

INSERT INTO users(users_id, name,age)
VALUES(1, 'abc', 30);

これにより、値が一時テーブルに正常に挿入されます。 ただし、一意の制約がある場合は、IGNORE または REPLACE 句を追加して、実行中のエラーを防ぐことができます。

一時テーブルのレコードを更新する

UPDATE users
SET name='xyz' WHERE users_id=3;

これにより、一時テーブル内の ID 3 を持つユーザーの名前が変更されます。 where 句の後の内容は、必要な条件に置き換えることができます。

一時テーブルのレコードを削除する

DELETE * FROM users

このクエリは、一時テーブルのすべてのコンテンツを削除します。 特定の行のみを削除する場合は、次のような WHERE 句を含める必要があります。

DELETE * FROM users
WHERE users_id=1

一時テーブルの操作を開始するために知っておく必要があるのはこれだけです。 この記事が、それらを適切に使用する方法を理解し、理解するのに役立つことを願っています。