SQLite の一時ストレージ

SQLiteSQLiteBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験(Lab)では、SQLite の一時ストレージについて、特に一時テーブルの作成と利用に焦点を当てて探求します。一時テーブルは、データベース接続内で短期間だけ必要な中間結果やデータを格納するためのメカニズムを提供します。

この実験(Lab)では、CREATE TEMP TABLE ステートメントを使用して temp_employees という名前の一時テーブルを作成する方法を説明します。一時テーブルのスコープ(scope)、ライフタイム(lifetime)、および命名規則について学び、通常テーブルとの違いを理解します。その後のステップでは、一時テーブルにデータを投入し、データをクエリ(query)し、データベース接続を閉じたときに一時テーブルが自動的にクリーンアップ(cleanup)されることを確認します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sqlite(("SQLite")) -.-> sqlite/SQLiteGroup(["SQLite"]) sqlite/SQLiteGroup -.-> sqlite/make_table("Create New Table") sqlite/SQLiteGroup -.-> sqlite/add_rows("Insert Multiple Rows") sqlite/SQLiteGroup -.-> sqlite/get_all("Select All Rows") sqlite/SQLiteGroup -.-> sqlite/query_where("Filter With WHERE") sqlite/SQLiteGroup -.-> sqlite/sort_data("Sort With ORDER BY") sqlite/SQLiteGroup -.-> sqlite/verify_table("Check Table Existence") sqlite/SQLiteGroup -.-> sqlite/end_db("Close Database Connection") subgraph Lab Skills sqlite/make_table -.-> lab-552557{{"SQLite の一時ストレージ"}} sqlite/add_rows -.-> lab-552557{{"SQLite の一時ストレージ"}} sqlite/get_all -.-> lab-552557{{"SQLite の一時ストレージ"}} sqlite/query_where -.-> lab-552557{{"SQLite の一時ストレージ"}} sqlite/sort_data -.-> lab-552557{{"SQLite の一時ストレージ"}} sqlite/verify_table -.-> lab-552557{{"SQLite の一時ストレージ"}} sqlite/end_db -.-> lab-552557{{"SQLite の一時ストレージ"}} end

一時テーブルの作成

このステップでは、SQLite で一時テーブルを作成する方法を学びます。一時テーブルは、複雑なクエリ(query)中に中間結果を格納したり、短期間だけ必要なデータを保持したりするのに役立ちます。一時テーブルは、データベース接続が閉じられると自動的に削除されます。

まず、LabEx VM でターミナル(terminal)を開きます。デフォルトのパス(path)は /home/labex/project です。

次に、employees.db という名前の SQLite データベースを作成しましょう。次のコマンドを実行して、データベースファイルを作成し、SQLite コマンドラインツール(command-line tool)を開きます。

sqlite3 employees.db

SQLite シェル(shell)内にいることを示すプロンプト(prompt)が表示されます。

SQLite version 3.x.x
Enter ".help" for usage hints.
sqlite>

一時テーブルを作成するには、CREATE TEMP TABLE ステートメント(statement)を使用します。構文(syntax)は、通常のテーブルを作成するのと似ています。

CREATE TEMP TABLE table_name (
    column1 datatype,
    column2 datatype,
    ...
);

従業員情報を格納するために、temp_employees という名前の一時テーブルを作成しましょう。sqlite> プロンプトで次の SQL コマンドを入力し、Enter キーを押します。

CREATE TEMP TABLE temp_employees (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT,
    department TEXT
);

このコマンドは、temp_employees という名前の一時テーブルを、id(自動的にインクリメント(increment)される整数型の主キー(primary key))、name(テキスト)、および department(テキスト)の 3 つのカラム(column)で作成します。

CREATE TEMP TABLE temp_employees: この SQL ステートメントは、temp_employees という名前の一時テーブルを作成します。TEMP キーワード(keyword)は、このテーブルが一時的なものであり、データベース接続が閉じられると自動的に削除されることを指定します。

id INTEGER PRIMARY KEY AUTOINCREMENT: これは、id という名前のカラムを整数型として定義し、テーブルの主キーとして設定し、新しい行が挿入されるたびに自動的にインクリメントするように構成します。

name TEXT: これは、name という名前のカラムを、従業員名を格納するためのテキストフィールド(text field)として定義します。

department TEXT: これは、department という名前のカラムを、各従業員が所属する部署を格納するためのテキストフィールドとして定義します。

一時テーブルへのデータの挿入

temp_employees テーブルを作成したので、いくつかのデータを追加しましょう。いくつかの従業員レコードをテーブルに挿入します。

一時テーブルにデータを挿入するには、通常のテーブルと同様に INSERT INTO ステートメントを使用します。

sqlite> プロンプトで次のコマンドを 1 つずつ実行して、次の従業員レコードを temp_employees テーブルに挿入します。

INSERT INTO temp_employees (name, department) VALUES ('Alice', 'Sales');
INSERT INTO temp_employees (name, department) VALUES ('Bob', 'Marketing');
INSERT INTO temp_employees (name, department) VALUES ('Charlie', 'Engineering');
INSERT INTO temp_employees (name, department) VALUES ('David', 'Sales');
INSERT INTO temp_employees (name, department) VALUES ('Eve', 'Marketing');
INSERT INTO temp_employees (name, department) VALUES ('Frank', 'Engineering');
INSERT INTO temp_employees (name, department) VALUES ('Grace', 'HR');
INSERT INTO temp_employees (name, department) VALUES ('Henry', 'Sales');

これらのコマンドは、temp_employees テーブルに 8 つの行を追加します。

INSERT INTO temp_employees (name, department): これは、temp_employees テーブルの name および department カラムにデータを挿入することを指定します。

VALUES ('Alice', 'Sales'): これは、各レコードに挿入される値を提供します。

データが正しく追加されたことを確認するには、次のコマンドを実行して、テーブル内のすべてのレコードを表示します。

SELECT * FROM temp_employees;

期待される出力:

1|Alice|Sales
2|Bob|Marketing
3|Charlie|Engineering
4|David|Sales
5|Eve|Marketing
6|Frank|Engineering
7|Grace|HR
8|Henry|Sales

この出力は、各レコードの idname、および department を示しています。SELECT * コマンドは、指定されたテーブルからすべてのカラムを取得します。

一時テーブルからのデータのクエリ(query)

このステップでは、さまざまな句(clause)を持つ SELECT ステートメントを使用して、一時テーブルからデータを取得する方法を学びます。データのクエリは、データベースを操作するための重要なスキルです。これにより、保存された情報を表示および分析できます。

sqlite> プロンプトで、まず temp_employees テーブルからすべてのデータを取得しましょう。次のコマンドを実行します。

SELECT * FROM temp_employees;

期待される出力:

1|Alice|Sales
2|Bob|Marketing
3|Charlie|Engineering
4|David|Sales
5|Eve|Marketing
6|Frank|Engineering
7|Grace|HR
8|Henry|Sales

SELECT ** は「すべてのカラム」を意味するため、このコマンドは temp_employees テーブルのすべてのカラムと行を表示します。

次に、WHERE 句を使用して条件でデータをフィルタ(filter)します。「Sales」部署の従業員のレコードのみを表示するには、次を実行します。

SELECT * FROM temp_employees WHERE department = 'Sales';

期待される出力:

1|Alice|Sales
4|David|Sales
8|Henry|Sales

WHERE 句は、結果を条件に一致する行に絞り込みます。この場合、department が「Sales」である行です。

  • SELECT * FROM temp_employees は、temp_employees テーブルからすべてのカラムを選択します。
  • WHERE department = 'Sales' は、結果を department カラムが「Sales」と等しい行のみを含むようにフィルタします。

次に、ORDER BY 句を使用して、名前でデータをソート(sort)します。

SELECT * FROM temp_employees ORDER BY name;

期待される出力:

1|Alice|Sales
2|Bob|Marketing
3|Charlie|Engineering
4|David|Sales
5|Eve|Marketing
6|Frank|Engineering
7|Grace|HR
8|Henry|Sales

ORDER BY 句は、指定されたカラムに基づいて結果をソートします。この場合、name カラムです。

最後に、LIMIT 句を使用して、結果の数を制限します。最初の 3 つのレコードのみを表示するには、次を実行します。

SELECT * FROM temp_employees LIMIT 3;

期待される出力:

1|Alice|Sales
2|Bob|Marketing
3|Charlie|Engineering

LIMIT 句は、クエリによって返される行数を制限します。

一時テーブルの自動クリーンアップの確認

このステップでは、データベース接続が閉じられたときに、一時テーブル temp_employees が自動的に削除されることを確認します。これは、一時テーブルの重要な特性です。

まず、次のように入力して SQLite シェルを終了します。

.exit

これにより、employees.db データベースへの接続が閉じられます。

次に、次を実行して SQLite シェルを再度開きます。

sqlite3 employees.db

temp_employees テーブルに対してクエリ(query)を実行してみます。

SELECT * FROM temp_employees;

テーブルが存在しないことを示すエラーメッセージが表示されるはずです。

Error: no such table: temp_employees

これは、以前のデータベース接続が閉じられたときに、一時テーブルが自動的に削除されたことを確認するものです。

SELECT * FROM temp_employees: この SQL ステートメントは、temp_employees テーブルからすべてのカラムと行を選択しようとします。

Error: no such table: temp_employees: このエラーメッセージは、temp_employees テーブルがデータベースに存在しないことを示しており、データベース接続が閉じられたときに自動的に削除されたことを確認するものです。

まとめ

この実験(Lab)では、SQLite で一時テーブルを作成および使用する方法を学びました。temp_employees という名前の一時テーブルを作成し、データを挿入し、さまざまな SELECT ステートメントを使用してデータをクエリ(query)し、データベース接続が閉じられたときに一時テーブルが自動的に削除されることを確認しました。これらの実践的な演習は、一時テーブルの包括的な入門となり、SQLite を使用して一時データを効果的に処理するための基礎知識を身につけることができました。