CREATE TABLE AS SELECT(CTAS)で表を作成する方法

Oracle Master Silver

こんにちは!今回は、SQLの中でも非常に便利なCREATE TABLE AS SELECT(略してCTAS)の使い方について解説します。この方法を使えば、既存のデータを基に新しい表を簡単に作成できます。

「CTASって何?」という方も、「どう使うの?」と悩んでいる方も、この記事を読めばすぐに使いこなせるようになります!図やサンプルSQLを使いながら、初心者にも分かりやすく説明します。

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

1. CTASとは何か?

CREATE TABLE AS SELECT(CTAS)は、以下を実現するSQL文です:

  • 新しい表の作成:既存の表やクエリ結果を基に、新しい表を作成します。
  • データのコピー:特定条件のデータを選択し、新しい表にコピーします。

CTASの主な用途

  • データ分析用の一時テーブル作成
  • バックアップ用テーブル作成
  • 特定の条件に基づくデータの抽出と保存

2. 基本構文の解説

以下がCTASの基本構文です:

CREATE TABLE 新しい表名
AS
SELECT 列1, 列2, ...
FROM 元の表
WHERE 条件;
  • 新しい表名:作成する表の名前を指定します。
  • SELECT文:元となるデータを取得するクエリを記述します。
  • WHERE句:必要なデータを抽出する条件を指定します(任意)。

3. サンプル表を使用した具体例

ここでは、サンプル表EMPLOYEESを作成し、それを基にしたCTASの具体例を紹介します。

3.1 サンプル表の作成

以下のSQLでサンプル表EMPLOYEESを作成し、データを挿入します。

-- サンプル表の作成
CREATE TABLE EMPLOYEES (
EMP_ID NUMBER PRIMARY KEY,
EMP_NAME VARCHAR2(50),
JOB_TITLE VARCHAR2(50),
SALARY NUMBER,
DEPT_ID NUMBER
);

-- データの挿入
INSERT INTO EMPLOYEES VALUES (101, 'Alice', 'Developer', 5000, 10);
INSERT INTO EMPLOYEES VALUES (102, 'Bob', 'Manager', 7000, 20);
INSERT INTO EMPLOYEES VALUES (103, 'Charlie', 'Analyst', 6000, 10);
INSERT INTO EMPLOYEES VALUES (104, 'Diana', 'Developer', 5500, 30);
INSERT INTO EMPLOYEES VALUES (105, 'Eve', 'Manager', 7500, 20);

-- データの確認
SELECT * FROM EMPLOYEES;
EMP_IDEMP_NAMEJOB_TITLESALARYDEPT_ID
101AliceDeveloper500010
102BobManager700020
103CharlieAnalyst600010
104DianaDeveloper550030
105EveManager750020

3.2 条件付きで新しい表を作成

例えば、給与が6000以上の従業員を抽出してHIGH_SAL_EMPLOYEESという表を作成します。

CREATE TABLE HIGH_SAL_EMPLOYEES
AS
SELECT EMP_ID, EMP_NAME, JOB_TITLE, SALARY
FROM EMPLOYEES
WHERE SALARY >= 6000;

3.3 作成された表を確認

以下のSQLで新しい表の内容を確認できます。

SELECT * FROM HIGH_SAL_EMPLOYEES;
EMP_IDEMP_NAMEJOB_TITLESALARY
102BobManager7000
103CharlieAnalyst6000
105EveManager7500

4. CTASのメリットと制限

4.1 メリット

  1. 高速処理:大量のデータを効率よくコピー可能。
  2. 柔軟性:必要な列や条件を指定できる。
  3. 簡便性SELECT文をそのまま使用して表を作成できる。

4.2 制限

  1. 制約はコピーされない
    • 主キーや外部キーなどの制約は引き継がれません。
    • 必要に応じて制約を追加してください。
    ALTER TABLE HIGH_SAL_EMPLOYEES ADD CONSTRAINT PK_HIGH_SAL_EMP PRIMARY KEY (EMP_ID);
  2. インデックスは作成されない
    • 新しい表にはインデックスが作成されません。
    • 必要な場合は別途インデックスを作成してください。
    CREATE INDEX IDX_JOB_TITLE ON HIGH_SAL_EMPLOYEES (JOB_TITLE);
  3. データ型の自動変換
    • 特に数値型や日時型は環境設定により変換される場合があります。

5. 応用テクニック

5.1 特定の列のみをコピー

元の表から特定の列だけを選択し、新しい表を作成します。

CREATE TABLE EMPLOYEE_NAMES
AS
SELECT EMP_NAME, JOB_TITLE
FROM EMPLOYEES;

5.2 空の表を作成

データをコピーせずに、元の表の構造だけをコピーしたい場合は、WHERE 1=2を指定します。

CREATE TABLE EMPTY_EMPLOYEES
AS
SELECT *
FROM EMPLOYEES
WHERE 1=2;

6. よくある質問(FAQ)

Q1. CTASで作成した表にデータを追加できますか?

A1. はい、通常のINSERT文を使用してデータを追加できます。

INSERT INTO HIGH_SAL_EMPLOYEES VALUES (106, 'Frank', 'Consultant', 6500);

Q2. パフォーマンスへの影響は?

A2. CTASは高速ですが、大規模データを処理する場合は一時領域やストレージの容量に注意してください。


7. まとめと次のステップ

CREATE TABLE AS SELECTは、データ分析やデータ移行の際に非常に役立つ機能です。この記事で紹介した内容を実践することで、CTASを効果的に使えるようになります。

次のステップとして:

  1. 制約やインデックスを追加して、新しい表をより効率的に活用。
  2. 複数のテーブルを結合して新しい表を作成する練習。
  3. 一時テーブルとしてCTASを使用し、複雑なデータ分析を行う。


[参考]
Oracle Database SQL言語リファレンス 19c

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

コメント

タイトルとURLをコピーしました