本文へスキップ
BecomeCoder

SQL テーブル設計 (DDL)コース · 第3章 正しく消す・作り直す · レッスン13

一時テーブル ― その場かぎりの作業台

ブラウザで完結

導入

「集計の途中結果を、いったんどこかに置いておきたい」「本番テーブルを汚さずに作業したい」。そんなときに便利なのが 一時テーブル(temporary table) です。今の接続の間だけ存在し、終われば自動で消える“使い捨ての作業台”です。

説明

CREATE TEMP TABLE(または CREATE TEMPORARY TABLE)で作ります。ふつうのテーブルとの違いは、その接続(セッション)が終わると自動的に消えること。本番のスキーマに残らないので、気軽に使えます。

CREATE TEMP TABLE work AS
  SELECT id, name, price FROM products WHERE price >= 5000;
SELECT * FROM work;

CREATE TABLE ... AS SELECT ...CTAS と呼ばれます)は、「SELECT の結果をそのまま中身にしたテーブルを作る」書き方です。一時テーブルと組み合わせると、「重い集計を一度だけ実行して作業台に置き、そこから何度も参照する」といった使い方ができます。

flowchart LR
    S["SELECT の結果"] -->|"CREATE TEMP TABLE ... AS"| W["一時テーブル work<br/>(接続が切れたら自動で消える)"]
    W --> Q["何度でも参照・加工"]

第7章で学ぶ CTE(WITH 句)も「途中結果に名前を付ける」道具ですが、CTE がそのクエリ1回かぎりなのに対し、一時テーブルは複数のクエリにまたがって使い回せるのが違いです。作業が済んだら DROP TABLE work; で明示的に消すこともできます。

やってみよう

初期表示のコードを実行し、5000円以上の商品だけを集めた一時テーブル work ができて表示されることを確認しましょう。次に SELECT COUNT(*) FROM work;SELECT * FROM work WHERE price >= 10000; のように、work をふつうのテーブルのように何度でも参照できることを試してください。

演習

users のうち都市が '東京' の会員だけを集めた一時テーブル tokyo_users を、CREATE TEMP TABLE ... AS SELECT ... で作ってください。

ヒント1を見る

CREATE TEMP TABLE tokyo_users AS SELECT * FROM users WHERE city = '東京';

ヒント2を見る

作ったあと SELECT * FROM tokyo_users; で中身を確認できます。

実際に動かしてみよう

下のエディタにクエリを書いて「実行」を押すと、ブラウザ内のSQLiteで結果が表示されます。本文の例をそのまま試したり、書き換えたりしてみましょう。

SQL — ブラウザ内で実行(SQLite)

ブラウザ内でSQLを動かす環境(SQLite)を読み込みます(初回のみ一瞬)。
スクロールして表示された時点でも自動で読み込まれます。