対象試験と出題頻度
CREATE文は、基本情報技術者・応用情報技術者で出題されるテーマです。
SQLのテーブル定義に関する問題で登場し、主キー制約や外部キー制約、CHECK制約と組み合わせて出題されるのが定番パターンです。
詳細をクリックして確認
基本情報技術者
応用情報技術者
★★★☆☆
ランクB(標準)覚えておくと有利
用語の定義
情報処理試験を勉強していると、「CREATE文って何を作る命令?ALTER文やDROP文とどう違うの?」と混乱しがちです。
CREATE文とは、一言で言うと
「データベース上にテーブルやビューなどのオブジェクトを新しく作成するSQL文(DDL)」
のことです。
イメージとしては、「白紙のExcelシートに列の見出しとルールを設定する作業」です。
Excelで新しいシートを作るとき、「A列は社員番号(数字のみ)」「B列は氏名(文字列)」のように列の名前とルールを先に決めます。
CREATE TABLE文も同じで、テーブルの列名・データ型・制約を先に定義してから、データを格納できる状態にします。
📊 CREATE文の基本情報
| 項目 | 内容 |
|---|---|
| 分類 | DDL(Data Definition Language:データ定義言語) |
| 役割 | テーブル・ビュー・インデックスなどのデータベースオブジェクトを新規作成する |
| 代表的な構文 | CREATE TABLE、CREATE VIEW、CREATE INDEX |
| 同じDDLの仲間 | ALTER(定義変更)、DROP(削除) |
解説
関係データベースでは、データを格納する前に「入れ物」となるテーブルを定義しなければなりません。
この定義作業を担うのがCREATE TABLE文です。
CREATE TABLE文の基本構文
構文の骨格は「テーブル名」「列名」「データ型」「制約」の4要素で構成されます。
— CREATE TABLE文の基本構文
CREATE TABLE テーブル名 (
列名1 データ型 制約,
列名2 データ型 制約,
…
PRIMARY KEY(列名),
FOREIGN KEY(列名) REFERENCES 参照先テーブル(列名)
);
具体例として、社員テーブルを定義するSQL文を示します。
— 社員テーブルの定義例
CREATE TABLE 社員 (
社員番号 CHAR(5) PRIMARY KEY,
氏名 VARCHAR(20) NOT NULL,
部署コード CHAR(3),
入社年 INT,
FOREIGN KEY(部署コード) REFERENCES 部署(部署コード)
);
図解:CREATE TABLE文で定義される構造
上記のSQL文を実行すると、以下のような空のテーブルがデータベース上に作成されます。
社員テーブル(CREATE TABLE 実行後のイメージ)
| 社員番号 CHAR(5) / PK |
氏名 VARCHAR(20) / NOT NULL |
部署コード CHAR(3) / FK→部署 |
入社年 INT |
|---|---|---|---|
| (データなし) | (データなし) | (データなし) | (データなし) |
▲ CREATE TABLEは「列の名前・型・制約」を定義するだけで、データ行はまだ存在しない
主な制約の種類
CREATE TABLE文の中で指定できる制約は、データの整合性を守るためのルールです。
ここだけは確実に押さえてください。
| 制約名 | キーワード | 意味 |
|---|---|---|
| 主キー制約 | PRIMARY KEY | 行を一意に識別する列を指定する。NULL不可・重複不可が自動適用される |
| 外部キー制約 | FOREIGN KEY / REFERENCES |
他のテーブルの主キーを参照し、存在しない値の登録を防ぐ(参照整合性) |
| 一意制約 | UNIQUE | 指定列の値の重複を禁止する。主キーと異なりNULLは許容する |
| 非NULL制約 | NOT NULL | NULLの入力を禁止する |
| 検査制約 | CHECK | 値の範囲や条件を指定する(例:CHECK(年齢 >= 0)) |
| デフォルト値 | DEFAULT | 値を指定せずにINSERTしたとき、自動的に設定される初期値を定義する |
DDLの3兄弟:CREATE・ALTER・DROP
CREATE文はDDLの一つです。
DDLには他にALTER文とDROP文があり、この3つはセットで押さえると理解が早まります。
CREATE
新規作成
テーブル・ビュー・
インデックスを作る
ALTER
定義変更
列の追加・削除・
制約の変更
DROP
削除
テーブル・ビュー・
インデックスを消す
▲ DDLは「作る(CREATE)」「変える(ALTER)」「消す(DROP)」の3操作
CREATE TABLE以外のCREATE文
CREATE文はテーブルだけでなく、ビューやインデックスの作成にも使います。それぞれ簡潔に整理します。
| 構文 | 作成対象 | ひとこと説明 |
|---|---|---|
| CREATE TABLE | 実表(テーブル) | データを実際に格納する基本の入れ物 |
| CREATE VIEW | ビュー(導出表) | SELECT文の結果に名前を付けた仮想的な表。データ実体は持たない |
| CREATE INDEX | インデックス(索引) | 検索速度を上げるための索引構造 |
では、この用語が試験でどのように出題されるか見ていきましょう。
💡 CREATE文の核心を3行で
・テーブルやビューなどを新規作成するDDL(データ定義言語)のSQL文
・CREATE TABLE文では列名・データ型・制約(PRIMARY KEY、FOREIGN KEY、CHECK等)を定義する
・DDLの仲間はALTER(変更)とDROP(削除)の2つ
試験ではこう出る!
CREATE文そのものを単独で問う出題は多くありませんが、テーブル定義の読み取りや制約の理解を前提にした問題で頻繁に登場します。
出題パターンは大きく3つに分かれます。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| AP H27春 午前 問28 |
CREATE TABLE文にCHECK制約が定義された表で、違反するSQL文を選ぶ問題。 | ・CHECK制約は挿入(INSERT)と更新(UPDATE)時にのみ検査される ・SELECTやDELETEでは検査制約は作用しない |
| AP R5春 午前 問30 |
CREATE TABLE文のFOREIGN KEY句に記述する参照動作を選ぶ問題。 | ・CASCADE、NO ACTION、SET NULLなどの参照動作の意味 ・親表の行が削除されたとき子表がどう振る舞うか |
| FE H31春 午後 問3 |
CREATE TABLE文でPRIMARY KEY制約が定義された表を読み取り、正規化やSQL操作を解く問題。 | ・CREATE TABLE文を「表構造の仕様書」として読み取る力 ・主キー・外部キーの定義から表間の関連を把握する |
📝 IPA試験での出題パターン
パターン1:「CREATE TABLE文の制約を読み取る」
CREATE TABLE文が提示され、各制約(PRIMARY KEY、FOREIGN KEY、CHECK、NOT NULL)の意味を理解した上でDML操作の正否を判断する形式。AP H27春 問28が代表例。
パターン2:「DDLの分類を問う」
「テーブルを定義するSQL文はどれか」「権限を与えるSQL文はどれか」のように、DDL・DML・DCLの分類を正確に区別させる形式。CREATE TABLEをGRANTやSELECTと混同させるひっかけが定番。
パターン3:「午後問題でテーブル定義を読み解く」
FE・APの午後データベース問題では、CREATE TABLE文がそのまま表構造の仕様書として提示される。SQL文の穴埋めや正規化の根拠を読み取る前提知識として必須。
試験ではここまででOKです。CREATE ASSERTIONやCREATE DOMAINなどの応用構文は、データベーススペシャリスト向けの内容なので深追いは不要です。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. SQL文のCREATE TABLE文に関する説明として、最も適切なものはどれでしょうか?
- A. 特定の利用者に対して、テーブルへの問合せや更新などの操作権限を付与するSQL文である。
- B. 列名・データ型・制約を指定して、データベース上にテーブルを新規に定義するDDL(データ定義言語)のSQL文である。
- C. 既存のテーブルの列を追加・削除したり、制約を変更したりするためのSQL文である。
正解と解説を見る
正解:B
解説:
CREATE TABLE文は、列名・データ型・各種制約を指定してテーブルを新規作成するDDLです。PRIMARY KEYやFOREIGN KEYなどの制約もこの文の中で定義します。
選択肢AはGRANT文の説明です。GRANT文はDCL(データ制御言語)に分類され、利用者への権限付与を行います。CREATE TABLE文とは役割がまったく異なります。選択肢CはALTER TABLE文の説明です。ALTER文はすでに存在するテーブルの構造を変更するDDLであり、新規作成を行うCREATE文とは操作の対象が違います。
よくある質問(FAQ)
Q. CREATE TABLE文とCREATE VIEW文の違いは何ですか?
CREATE TABLE文は実際にデータを格納する「実表」を作ります。一方、CREATE VIEW文はSELECT文の結果に名前を付けた「導出表(仮想表)」を定義するもので、データ実体は持ちません。ビューに対してSELECTを実行すると、内部では元のSELECT文が再評価されます。AP H28秋 午前問28では、実表と導出表の違いが問われています。
Q. CREATE TABLE文を実行した直後、テーブルにデータは入っていますか?
入っていません。CREATE TABLE文は「列の構造と制約」を定義するだけです。データを追加するにはINSERT文(DML)を別途実行する必要があります。DDL(定義)とDML(操作)は明確に区別してください。
Q. 実務でCREATE TABLE文を直接書くことはありますか?
あります。開発プロジェクトでは、論理データモデルを基にCREATE TABLE文を記述して物理テーブルを構築する作業が必ず発生します。ただし、ER図作成ツール(A5:SQL Mk-2やMySQL Workbenchなど)から自動生成するケースも多く、手書きの頻度はプロジェクトによって異なります。
Q. FOREIGN KEY句のREFERENCESで指定する参照動作(CASCADE等)はFEでも出題されますか?
FEの科目Aで単独出題される可能性は低いです。参照動作(CASCADE、SET NULL、NO ACTION等)の詳細はAP午前や午後のデータベース問題で問われるレベルです。FEの範囲では「FOREIGN KEYは他の表の主キーを参照する制約」という理解で十分対応できます。