こんにちは!今回は、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_ID | EMP_NAME | JOB_TITLE | SALARY | DEPT_ID |
|---|---|---|---|---|
| 101 | Alice | Developer | 5000 | 10 |
| 102 | Bob | Manager | 7000 | 20 |
| 103 | Charlie | Analyst | 6000 | 10 |
| 104 | Diana | Developer | 5500 | 30 |
| 105 | Eve | Manager | 7500 | 20 |
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_ID | EMP_NAME | JOB_TITLE | SALARY |
|---|---|---|---|
| 102 | Bob | Manager | 7000 |
| 103 | Charlie | Analyst | 6000 |
| 105 | Eve | Manager | 7500 |
4. CTASのメリットと制限
4.1 メリット
- 高速処理:大量のデータを効率よくコピー可能。
- 柔軟性:必要な列や条件を指定できる。
- 簡便性:
SELECT文をそのまま使用して表を作成できる。
4.2 制限
- 制約はコピーされない
- 主キーや外部キーなどの制約は引き継がれません。
- 必要に応じて制約を追加してください。
ALTER TABLE HIGH_SAL_EMPLOYEES ADD CONSTRAINT PK_HIGH_SAL_EMP PRIMARY KEY (EMP_ID); - インデックスは作成されない
- 新しい表にはインデックスが作成されません。
- 必要な場合は別途インデックスを作成してください。
CREATE INDEX IDX_JOB_TITLE ON HIGH_SAL_EMPLOYEES (JOB_TITLE); - データ型の自動変換
- 特に数値型や日時型は環境設定により変換される場合があります。
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を効果的に使えるようになります。
次のステップとして:
- 制約やインデックスを追加して、新しい表をより効率的に活用。
- 複数のテーブルを結合して新しい表を作成する練習。
- 一時テーブルとしてCTASを使用し、複雑なデータ分析を行う。
[参考]
Oracle Database SQL言語リファレンス 19c
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?




コメント