SQL│テーブルを作成する(CREATE TABLE)

今回は、RDBMSでテーブルを作成するSQL文「CREATE TABLE」について説明します。

以前、データベースの作成について記事にしたのですが、テーブルの作成はカラムの概念やデータ型、制約、主キーなど、データベースの基本知識が問われる工程になります。

そもそも、実際にデータベースに格納されるデータは、テーブル上で管理されますので、テーブルの作成は最も基本的かつ重要な操作と認識しておきましょう。

この記事では、RDBMSでテーブルを作成するためのSQL文「CREATE TABLE」を、実際の画像も使って説明します。

目次

テーブルの作成の基本_データ型・NOT NULL制約・主キー

早速、テーブルを作成するSQL文について説明します。

テーブルを作成するための「CREATE TABLE」のSQL文から、命名規則やデータ型、NOT NULL制約、主キーの設定まで、この章で説明します。

なお、当記事で作成するテーブル種別は「従業員テーブル」とし、下記はExcelで作成した見本です。ただし、後述しますがSQLではテーブル名に日本語は使えません。そのため、実際に作成するときのテーブル名は「Worker」とします。

このテーブルをSQLで作成する

CREATE TABLE文

RDBMS上にテーブルを作成するときには、[CREATE TABLE]というSQL文を実行します。

ここでは、[Worker]という名前のテーブルを作成します。

CREATE TABLE Worker
(worker_id    CHAR(5)       NOT NULL,
 name         VARCHAR(20)   NOT NULL,
 birthday     DATE          NOT NULL,
 gender       INTEGER       NOT NULL,
 prefecture   VARCHAR(50)   NOT NULL,
 hire_date    DATE          NOT NULL,
 department   INTEGER       NOT NULL,
 wage         INTEGER       NOT NULL,
 position     INTEGER       NOT NULL,
 PRIMARY KEY (worker_id));

上記のSQL文を実行することで、RDBMSのデータベース上にテーブルが作成されます。この記事では、[Worker]という名前のデータベースを作成しました。

1行目

CREATE TABLE文です。

2~10行目

2行目の(worker_idから10行目にかけて、テーブルの列名・データ型・制約を定義しています。詳細は当章[データ型]および[NOT NULL制約]の節で説明します。

11行目

11行目のPRIMARY KEY (worker_id));で、このテーブルの主キーを定義しています。詳細は当章[主キー]の節で説明します。

命名規則

SQL文「CREATE TABLE」の詳細を説明するまえに、テーブルを作成するうえで必要となるSQLの命名規則について説明します。

普段、業務で使っているテーブル(表)は、ほとんどの場合、日本語が使われていると思います。たとえば、Excelのファイル名や列名などです。

ファイル名や列名(1行目)は日本語

テーブル名と列名

SQLでは、データベース名やテーブル名、列名に日本語(全角文字)を使うことはできません。使える文字は、半角アルファベット、数字、アンダーバー(_)のみです。

そのため、RDBMS上に作成するテーブルの元になるExcel等のデータがある場合には、列名などをRDBMS用に再定義する必要があります。

この記事では、下記のExcelの表を元にしてRDBMS上にテーブルを作成しますが、それぞれの列名は下表の通りに再定義します。

テーブルの元データ(Excel)
Excel上の列Excel上のヘッダー定義:RDBMSの列名
A社員番号worker_id
B氏名name
C誕生日birthday
D性別gender
E住所prefecture
F雇用年月日hire_date
G所属部署department
H賃金ランクwage
I役職position
列名をアルファベット等で定義する

テーブルに格納するデータ

データベースやテーブル、列名に日本語を使うことはできませんが、テーブルに格納するデータは日本語が使えます。日本語の使用が制限されるのはあくまでも「データベース名・テーブル名・列名」です。

データ型

次に、テーブルのデータ型について説明します。テーブル作成の中でも重要性の高い項目です。

Excelなどの表計算ソフトでは、基本的に日付や数字、文字列など、どのような型のデータでも入力することができますが、データの整理・活用を目的としたデータベース(RDBMS)では、それぞれの列にどのような型のデータを格納するのか、明確に定義する必要があります。

データ型の定義はテーブル作成時点で行い、定義された型以外のデータは登録することができません。

すべての列のデータ型を定義する

SQLのデータ型には様々な種類がありますが、当記事では代表的なデータ型のみ紹介します。その他のデータ型については、必要に応じてインターネット等で調べてください。

INTEGER型

整数の列に指定するデータ型です。小数を含めることはできません。

CHAR型

文字列の列に指定するデータ型です。CHAR型を使うときには、同時に文字列の長さも指定する必要があります。たとえば、20文字を上限とする[name]という列であれば、下記のように記述します。

name  CHAR(20)

また、CHAR型は固定長文字列という形式となりますので、CHAR型で定義した列に格納されたデータが最大長に満たない場合には、半角スペースで補完されます。

固定長文字列について

多くの方がご経験したことがあると思いますが、何らかのシステムからcsv等でデータをエクスポートした際、データの末尾にスペースが含まれていることがあります。

これは、そのシステムで定義されたデータ型が「固定長文字列」になっていたことが原因なのです。

エクスポートしたcsv等のスペースの正体は固定長文字列

VARCHAR型

CHAR型と同じく、文字列の列に指定するデータ型です。文字列の長さを指定する必要があることも、CHAR型と一緒です。

name  VARCHAR(20)

CHAR型との違いは、VARCHAR型は可変長文字列という形式であり、格納されたデータが最大長に満たない場合でも、半角スペースで補完されることはありません。

DATE型

日付の列に指定するデータ型です。

SQL文の復習

以上が、SQLの基本的なデータ型の説明です。上記を踏まえたうえで、当章の[CREATE TABLE]の節で紹介したSQL文を見返してみましょう。

CREATE TABLE Sample
(worker_id    CHAR(5)       NOT NULL,
 name         VARCHAR(20)   NOT NULL,
 birthday     DATE          NOT NULL,
 gender       INTEGER       NOT NULL,
 prefecture   VARCHAR(50)   NOT NULL,
 hire_date    DATE          NOT NULL,
 department   INTEGER       NOT NULL,
 wage         INTEGER       NOT NULL,
 position     INTEGER       NOT NULL,
 PRIMARY KEY (worker_id));

2行目から10行目にかけて、データ型が定義されているのが分かります。なお、データ型の前に記述されているのは、列名の定義です。

だいぶ読めるようになってきましたね。

次節は、NOT NULL制約についてです。

NOT NULL制約

テーブル名や列名の命名規則、データ型の定義の次に必要なのはNOT NULL制約です。

少しでも、プログラミングに触れたことのある方であれば、ご想像がついていると思いますが、NOT NULL制約は、その列に空白のデータを許可するかどうかの制約です。(NULLとは「無記入の状態」)

NOT NULLで定義した列は、いわゆる「入力必須」の列となり、空白(無記入)のデータを格納することができなくなります。

SQLの構文では、[NOT NULL]の記述の有無によって、NOT NULLの制約を指定します。

name  VARCHAR(20) NOT NULL,・・空白を許可しない
name  VARCHAR(20)     ,    ・・空白を許可する

主キー

最後にテーブルの主キーの設定について説明します。

RDBMS、つまり関係データベースでは、データが表形式で格納されます。また、その名の通り、各テーブルは[主キー]を持っており、[主キー]によって、それぞれのテーブルのデータが関連付けされます。

それぞれのテーブルには主キーが設定されている

主キーのことを、SQL文では、[PRIMARY KEY]と記述します。

章のまとめ

RDBMSでテーブルを作成するための[CREATE TABLE]から、命名規則、データ型、NOT NULL制約、主キーについて説明しました。以上が、テーブル作成に必要な基本知識です。

改めて当章の前半で紹介したテーブル作成のSQL文を見返してみましょう。

CREATE TABLE Sample
(worker_id    CHAR(5)       NOT NULL,
 name         VARCHAR(20)   NOT NULL,
 birthday     DATE          NOT NULL,
 gender       INTEGER       NOT NULL,
 prefecture   VARCHAR(50)   NOT NULL,
 hire_date    DATE          NOT NULL,
 department   INTEGER       NOT NULL,
 wage         INTEGER       NOT NULL,
 position     INTEGER       NOT NULL,
 PRIMARY KEY (worker_id));

SQLはプログラミング言語のように、実際に触ってみるのが理解・上達の近道です。実際に、ご自身の手でSQL文を実行してみることをおススメします。

実例_MySQLのCREATE TABLE

実際のRDBMS、MySQLでCREATE TABLE文を実行してテーブルを作成した実画像を紹介します。

CREATE TABLEの実行

MySQLのCREATE TABLE実行画面

以上で、MySQLにテーブルを作成できました。

コマンドで確認(参照)

前節で作成したテーブルを確認してみます。(CREATE TABLE実行後)

SHOW COLUMNS

実例_PostgreSQLのCREATE TABLE

実際のRDBMS、PostgreSQLでCREATE TABLE文を実行してテーブルを作成した実画像を紹介します。

CREATE TABLEの実行

PostgreSQLのCREATE TABLE実行画面

以上で、PostgreSQLにテーブルを作成できました。

コマンドで確認(参照)

前節で作成したテーブルを確認してみます。(CREATE TABLE実行後)

\d Worker

あとがき

今回は、RDBMSにテーブルを作成するためのSQL文「CREATE TABLE」から、命名規則、データ型、NOT NULL制約、主キーの設定まで、具体的な内容を記事にしました。

実際のSQL文や、それぞれの詳細まで説明しましたので、一通りご理解いただけたのではないでしょうか。

本文内にも記載しましたが、SQLは実際にご自身で実行することが習得の近道です。

この記事で紹介した、MySQLPostgreSQLを使って、ぜひ試してみてください。

なお、下記の記事では今回作成したテーブルに、データを登録する方法について説明しています。ご関心があれば、ご覧ください。

目次