今回は、RDBMSでテーブルを作成するSQL文「CREATE TABLE」について説明します。
以前、データベースの作成について記事にしたのですが、テーブルの作成はカラムの概念やデータ型、制約、主キーなど、データベースの基本知識が問われる工程になります。
そもそも、実際にデータベースに格納されるデータは、テーブル上で管理されますので、テーブルの作成は最も基本的かつ重要な操作と認識しておきましょう。
この記事では、RDBMSでテーブルを作成するためのSQL文「CREATE TABLE」を、実際の画像も使って説明します。
早速、テーブルを作成するSQL文について説明します。
テーブルを作成するための「CREATE TABLE」のSQL文から、命名規則やデータ型、NOT NULL制約、主キーの設定まで、この章で説明します。
なお、当記事で作成するテーブル種別は「従業員テーブル」とし、下記はExcelで作成した見本です。ただし、後述しますがSQLではテーブル名に日本語は使えません。そのため、実際に作成するときのテーブル名は「Worker」とします。
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]という名前のデータベースを作成しました。
CREATE TABLE文です。
2行目の(worker_idから10行目にかけて、テーブルの列名・データ型・制約を定義しています。詳細は当章[データ型]および[NOT NULL制約]の節で説明します。
11行目のPRIMARY KEY (worker_id));で、このテーブルの主キーを定義しています。詳細は当章[主キー]の節で説明します。
SQL文「CREATE TABLE」の詳細を説明するまえに、テーブルを作成するうえで必要となるSQLの命名規則について説明します。
普段、業務で使っているテーブル(表)は、ほとんどの場合、日本語が使われていると思います。たとえば、Excelのファイル名や列名などです。
SQLでは、データベース名やテーブル名、列名に日本語(全角文字)を使うことはできません。使える文字は、半角アルファベット、数字、アンダーバー(_)のみです。
そのため、RDBMS上に作成するテーブルの元になるExcel等のデータがある場合には、列名などをRDBMS用に再定義する必要があります。
この記事では、下記のExcelの表を元にしてRDBMS上にテーブルを作成しますが、それぞれの列名は下表の通りに再定義します。
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のデータ型には様々な種類がありますが、当記事では代表的なデータ型のみ紹介します。その他のデータ型については、必要に応じてインターネット等で調べてください。
整数の列に指定するデータ型です。小数を含めることはできません。
文字列の列に指定するデータ型です。CHAR型を使うときには、同時に文字列の長さも指定する必要があります。たとえば、20文字を上限とする[name]という列であれば、下記のように記述します。
name CHAR(20)
また、CHAR型は固定長文字列という形式となりますので、CHAR型で定義した列に格納されたデータが最大長に満たない場合には、半角スペースで補完されます。
多くの方がご経験したことがあると思いますが、何らかのシステムからcsv等でデータをエクスポートした際、データの末尾にスペースが含まれていることがあります。
これは、そのシステムで定義されたデータ型が「固定長文字列」になっていたことが原因なのです。
CHAR型と同じく、文字列の列に指定するデータ型です。文字列の長さを指定する必要があることも、CHAR型と一緒です。
name VARCHAR(20)
CHAR型との違いは、VARCHAR型は可変長文字列という形式であり、格納されたデータが最大長に満たない場合でも、半角スペースで補完されることはありません。
日付の列に指定するデータ型です。
以上が、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制約は、その列に空白のデータを許可するかどうかの制約です。(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文を実行してみることをおススメします。
実際のRDBMS、MySQLでCREATE TABLE文を実行してテーブルを作成した実画像を紹介します。
以上で、MySQLにテーブルを作成できました。
前節で作成したテーブルを確認してみます。(CREATE TABLE実行後)
実際のRDBMS、PostgreSQLでCREATE TABLE文を実行してテーブルを作成した実画像を紹介します。
以上で、PostgreSQLにテーブルを作成できました。
前節で作成したテーブルを確認してみます。(CREATE TABLE実行後)
今回は、RDBMSにテーブルを作成するためのSQL文「CREATE TABLE」から、命名規則、データ型、NOT NULL制約、主キーの設定まで、具体的な内容を記事にしました。
実際のSQL文や、それぞれの詳細まで説明しましたので、一通りご理解いただけたのではないでしょうか。
本文内にも記載しましたが、SQLは実際にご自身で実行することが習得の近道です。
この記事で紹介した、MySQLやPostgreSQLを使って、ぜひ試してみてください。
なお、下記の記事では今回作成したテーブルに、データを登録する方法について説明しています。ご関心があれば、ご覧ください。