データ管理を効率化!SQLite の SELECT INTO ステートメントをマスターしよう
SQLite の SELECT INTO ステートメント
基本的な構文
SELECT 列名1, 列名2, ...
INTO 新しいテーブル名
FROM 既存のテーブル名
[WHERE 条件];
例:
-- 既存のテーブル "customers" から "name" と "email" 列を新しいテーブル "contacts" にコピー
SELECT name, email
INTO contacts
FROM customers;
-- 条件付きで新しいテーブル "active_users" を作成
SELECT *
INTO active_users
FROM users
WHERE is_active = 1;
詳細
SELECT
句でコピーしたい列を指定します。INTO
句で新しいテーブルの名前を指定します。FROM
句でデータを取得する既存のテーブルを指定します。WHERE
句はオプションで、コピーするデータの条件を指定できます。
SELECT INTO ステートメントの利点:
- 既存のテーブルの構造を複製できる
- 複雑なクエリ結果を新しいテーブルとして保存できる
- 一時的なテーブルを作成して、複雑な処理を行うことができる
注意点:
- 新しいテーブルが存在する場合は、上書きされます。
SELECT
句で指定した列の順序は、新しいテーブルの列の順序になります。- データ型は、元のテーブルと新しいテーブルで一致する必要があります。
既存のテーブルのデータを別のテーブルにコピー
-- customers テーブルから name と email 列を contacts テーブルにコピー
SELECT name, email
INTO contacts
FROM customers;
-- 確認
SELECT * FROM contacts;
| name | email |
|---|---|
| 山田太郎 | [email protected] |
| 佐藤花子 | [email protected] |
| 鈴木一郎 | [email protected] |
条件付きで新しいテーブルを作成
-- users テーブルから is_active が 1 のデータのみ active_users テーブルにコピー
SELECT *
INTO active_users
FROM users
WHERE is_active = 1;
-- 確認
SELECT * FROM active_users;
結果:
| id | name | email | is_active |
|---|---|---|---|
| 1 | 山田太郎 | [email protected] | 1 |
| 3 | 佐藤花子 | [email protected] | 1 |
複雑なクエリ結果を新しいテーブルとして保存
-- 過去 1 年間の注文データのうち、合計金額が 10,000 円以上のものを orders_over_10000 テーブルに保存
SELECT *
INTO orders_over_10000
FROM orders
WHERE order_date >= date('now', '-1 year')
AND total_amount >= 10000;
-- 確認
SELECT * FROM orders_over_10000;
| id | customer_id | order_date | total_amount |
|---|---|---|---|
| 100 | 1 | 2023-03-08 | 12,000 |
| 101 | 2 | 2023-05-12 | 11,500 |
| 102 | 3 | 2023-07-01 | 10,800 |
- 上記のサンプルコードは、SQLite 3.36.0 で動作確認しています。
SQLite データを別のテーブルにコピーする他の方法
INSERT INTO
ステートメントを使用して、データを1行ずつ新しいテーブルに挿入できます。
-- customers テーブルから name と email 列を contacts テーブルにコピー
INSERT INTO contacts (name, email)
SELECT name, email
FROM customers;
- この方法は、データ量が多い場合に時間がかかることがあります。
- 主キーや自動生成される列の値を指定する必要がある場合は、
INSERT INTO
ステートメントのオプションを使用する必要があります。
CREATE TABLE AS SELECT
ステートメントを使用して、既存のテーブルのクエリ結果を新しいテーブルとして作成できます。
-- 過去 1 年間の注文データのうち、合計金額が 10,000 円以上のものを orders_over_10000 テーブルに保存
CREATE TABLE orders_over_10000 AS
SELECT *
FROM orders
WHERE order_date >= date('now', '-1 year')
AND total_amount >= 10000;
- この方法は、新しいテーブルの構造が元のテーブルと同じになる場合にのみ使用できます。
外部ツール
SQLite データを別のテーブルにコピーするために使用できる外部ツールもいくつかあります。
- SQLiteDB Browser
- DB Browser for SQLite
- SQLite Manager
これらのツールは、GUI を使用してデータを簡単にコピーできます。
- データ量
- コピーしたいデータの複雑さ
- 新しいテーブルの構造
- 使いやすさ
データ量が少なく、コピーしたいデータが単純な場合は、SELECT INTO ステートメントが最も簡単な方法です。
データ量が多い場合や、コピーしたいデータが複雑な場合は、CREATE TABLE AS SELECT ステートメントを使用すると、処理時間を短縮できます。
新しいテーブルの構造が元のテーブルと同じではない場合は、INSERT INTO ステートメントを使用する必要があります。
GUI を使用してデータをコピーしたい場合は、外部ツールを使用するのが便利です。
sqlite