【SQL】UNIONの使い方と活用事例をわかりやすく解説

【SQL】CREATE TABLE文でテーブルを作成する方法を初心者向けに解説

Rii

Rii

ボールド歴8年

データベースに新しいテーブルを作成するときは「CREATE TABLE」を使います。
テーブルを作る構文自体はそれほど難しいわけではないですが、システムの運用で使うテーブルを作る場合は結構重要なことをたくさん決めなければならずとても奥が深いです。
今回はシンプルなテーブルの作り方をご紹介します。 シンプルなテーブルを際も、事前に検討しておくべき項目がいくつかありますので順番に解説します。


1.CREATE TABLE とは

CREATE TABLEは、データベース上にテーブルを作成します。
ここでは基本的なテーブルの作成方法について解説します。
前述したように、テーブル名、カラム名やデータ型など最低限決めなければならない項目がいくつかありますので順を追って見ていきます。

1-1.CREATE TABLE の基本構文

CREATE TABLE はテーブルの新規作成に使用します。
基本構文は以下の通りです。

CREATE TABLEの構文

CREATE TABLE  テーブル名 (
カラム名1 データ型 オプション
カラム名2 データ型 オプション
カラム名3 データ型 オプション
);

この記事では詳細は記述しませんが、既存のテーブル情報を変更することもできます。
その場合は「ALTER TABLE」を使います。

1-2.CREATE TABLE文記述に必要な情報

基本構文を見ていただくと分かりますが、テーブルを作成するにあたり、決めなければいけないことがいくつかあります。最低でも以下の3つは必要です。

CREATE TABLE

①テーブル名
 テーブルの名前を決めます。
 テーブル名はDBの中でユニーク(一意)になるようにします。
 
②カラム名
 カラムの名称のみではなく、どんなカラムが必要になるかも決めておきます。
 例えば住所を登録するなら、都道府県名とその続きをすべて1カラムに格納するか、カラムを分けるかなども検討事項になります。

③データ型
 テーブルのデータにはデータ型を設定します。
 文字列、数値、日付などの種別に従いデータ型を決めます。

データ型は非常にたくさんの種類があります。何文字程度のデータが入るか、数値なら少数は扱うのか、 日付には時間まで格納するのかなど登録したいデータをイメージしながら、それぞれのカラムについてデータ型を決めていきます。

実際にはさらに様々なことを決めなければいけませんが、今回は基本の3つについて説明しました。

1-3.CREATE TABLE文記述の注意点

 

テーブル作成にあたり、いくつか注意したほうが良いことがあります。

テーブル名やカラム名に日本語は使わない

テーブル名や列名には日本語は使わず、半角アルファベット・数字・アンダースコア(_)のみにしておいた方が良いです。
データベースによっては日本語のテーブル名を作成すること自体はできますが、他のシステムとの連携等で問題が発生することがありますので、日本語のカラム名は避けたほうが良いでしょう。

データ型は最初にきちんと検討する

また、設定したデータ型を後から変更することは可能ですが、登録済みのデータにも影響を与えますので最初にしっかり検討しておいたほうが無難です。


2.CREATE TABLE文のサンプルコード

それでは実際の書き方を見ていきます。

2-1.サンプルコード1 ―基本的なテーブル作成―

今回は次のようなテーブルを作ります。
文字列型、数値型、日付型と3種類のカラムで構成されています。
ここでは特にオプションを指定しません。

テーブル名:Fruits

列名格納するデータ

Fruits

フルーツの名前(文字列型)

Favorite_Rank

順位(整数)

Input_date

入力日(日付)

CREATE TABLE Fruits(
    Fruits Varchar(100),
    Favorite_Rank int,
    Input_date date
);

シンプルなテーブルが作成できました。
Varchar(100) は Varcharという文字列型を指定、()内はバイト数を示しています。

テーブルを作成したのでデータを入れてみます。

INSERT INTO Fruits (Fruits, Favorite_Rank, Input_date) VALUES
('りんご', 1, '2025-04-13'),
('バナナ', 2, '2025-04-12'),
('みかん', 3, '2025-04-11');

 

SELECT結果は以下の通りです。
テーブルFruitsが作成され、データがインサートされています。

【SELECT結果】
==========================================================
mysql> SELECT * FROM Fruits;
+———–+—————+————+
| Fruits | Favorite_Rank | Input_date |
+———–+—————+————+
| りんご | 1 | 2025-04-13 |
| バナナ | 2 | 2025-04-12 |
| みかん | 3 | 2025-04-11 |
+———–+—————+————+
3 rows in set (0.00 sec)
==========================================================

2-2. サンプルコード2 ―オプションを追加する―

前項では基本的なテーブル作成をしました。 実際にテーブルを作る際はシステムに応じて色々と考慮すべきことがあります。

例えば、IDなど登録必須のカラムには「PRIMARY KEY」設定をする、「NOT NULL」のオプションを付けるなどの方法でNULL値を登録できないようにします。
 ※NULL とは何も登録されていない状態のこと

他にも、PRIMARY KEY (主キー)の設定やデフォルト値(値が何も設定されなかった場合にデフォルトで入力する値)の設定など用途に応じて設定します。

次のSQLでは幾つか条件を設けてFruits2テーブルを作成してみます。

ソース内のコメントの通りですが次のようなオプション設定をしました。

Fruit_ID:
 主キー(プライマリーキー)に設定しています。プライマリーキーは重複とNULLが許可されません。  Fruits:
 NOT NULL 制約を設けたため入力必須となります。
 Favorite_Rank:
 何も設定しません。
 Input_date:
 NOT NULL 制約なので入力必須です。

CREATE TABLE Fruits2 (
    Fruit_ID INT PRIMARY KEY,         -- 主キー(重複不可・NULL不可)
    Fruits VARCHAR(100) NOT NULL,     -- フルーツの名前(必須)
    Favorite_Rank INT,                -- 順位(任意)
    Input_date DATE NOT NULL          -- 入力日(必須)
);

テーブルが作成できました。こちらにも次のINSERT文でデータを入れてみます。

INSERT INTO Fruits2 (Fruit_ID, Fruits, Favorite_Rank, Input_date) VALUES
(1, 'いちご', 1, '2025-04-13'),
(2, 'りんご', 3, '2025-04-13'),
(3, 'バナナ', 5, '2025-04-13'),
(4, 'みかん', 2, '2025-04-13'),
(5, 'ぶどう', 4, '2025-04-13');

 

【SELECT結果】

==========================================================
mysql> SELECT * FROM Fruits2;
+———-+———–+—————+————+
| Fruit_ID | Fruits | Favorite_Rank | Input_date |
+———-+———–+—————+————+
| 1 | いちご | 1 | 2025-04-13 |
| 2 | りんご | 3 | 2025-04-13 |
| 3 | バナナ | 5 | 2025-04-13 |
| 4 | みかん | 2 | 2025-04-13 |
| 5 | ぶどう | 4 | 2025-04-13 |
+———-+———–+—————+————+
5 rows in set (0.01 sec)
==========================================================

それではテーブルの条件に合わないデータをINSERTしようとするとどうなるでしょうか。

Fruits は入力必須ですが、 NULL となっているINSERT文を実行します。

==========================================================
mysql> INSERT INTO Fruits2 (Fruit_ID, Fruits, Favorite_Rank, Input_date) VALUES
-> (6, NULL, 6, ‘2025-04-13’);
ERROR 1048 (23000): Column ‘Fruits’ cannot be null
mysql>
==========================================================

「Column ‘Fruits’ cannot be null」とエラーが出力しINSERTできませんでした。


3 .オプションについて

前項までにも少し触れましたがテーブルを作成するにあたり、オプションを設定することにより細かな条件を付与することができます。

オプションは先ほど紹介したものに加え次のようなものがあります。用途にあわせて設定をおこないます。

 • PRIMARY KEY:プライマリーキーを設定する
 • NOT NULL:NULLを許可しない
 • IF NOT EXISTS:テーブルが存在しない場合にのみ作成する
 • UNIQUE:ユニークキーを設定する
 • AUTO_INCREMENT:連番を設定する
 • DEFAULT:カラムのデフォルト値を設定する
 • インデックス:カラムにインデックスを設定する
  ※インデックス 索引のようなもの。データの検索を高速化する目的で作成する。


4.まとめ

テーブル作成の基本構文

CREATE TABLE テーブル名 (
カラム名1 データ型 オプション
カラム名2 データ型 オプション
);

テーブル作成についてまとめ

・テーブル名はDBの中でユニークにする
・カラムには適切なデータ型を設定する
・オプションにより、詳細な設定をすることができる
・テーブルの設計はシステム運用でとても大切

テーブルの基本的な作成方法については以上です。
実際にシステムで使うテーブルを作る際には考慮すべきことがたくさんありますが、今回はテーブル作成の基本について解説しました。

最後までお読みいただきまして、ありがとうございました。

【参考サイト】
https://dev.mysql.com/doc/refman/8.0/ja/create-table.html

【動作検証DB】
mySQL 8.0.39

私たちは、全てのエンジニアに市場価値を高め自身の望む理想のキャリアを歩んでいただきたいと考えています。もし、今あなたが転職を検討しているのであればこちらの記事をご一読ください。理想のキャリアを実現するためのヒントが見つかるはずです。

『技術力』と『人間力』を高め定年まで働けるエンジニアを目指しませんか?

私たちは「技術力」だけでなく「人間力」の向上をもって、エンジニアとしてだけでなくビジネスパーソンとして高い水準を目指し、社会や顧客に必要とされることで、関わる人々に感動を与える集団であろうと思っています。

  • 定年までIT業界で働くためのスキルが身につく「感動大学」と「技術勉強会」!
  • 「給与が上がらない」を解消する6ヶ月に1度の明確な「人事評価制度」!
  • 理想のエンジニア像に近づくためのよきアドバイザー「専任コーチ制度」!
  • 稼動確認の徹底により実現できる平均残業時間17時間の働きやすい環境!

現在、株式会社ボールドでは「キャリア採用」のエントリーを受付中です。

まずは以下のボタンより弊社の紹介をご覧いただき、あなたの望むキャリアビジョンをエントリーフォームより詳しくお聞かせください。

コメント

IT業界を目指す求職者へ

プレミアムSES®で市場価値の高いエンジニアへ

株式会社ボールドが約束する5つのプレミアムとは?

IT業界を目指す求職者へ

プレミアムSES®で市場価値の高いエンジニアへ

株式会社ボールドが約束する5つのプレミアムとは?