CREATE TABLEでテーブルを作成してみよう! 超初心者のSQLの勉強

2020-04-05

SQLをすっかり使わなくなってしまい、一から勉強中です。
今回は練習するために必要なテーブルを作成するCREATE文と最低限知っておいたほうが良さそうなことをまるっと学びたいと思います。

詳細を書き出すととんでもない量になってしまうので、初心者がSQL文を練習するための準備のテーブルを作れることを目標に書いていきます。

環境

環境構築するのは面倒ですし、書くことに専念したいのでサイトを利用して練習したいと思います。
練習サイト : SQL Fiddle

PostgresSQLとMySQLで動作確認しています。

CREATE TABLE 構文

CREATE TABLE テーブル名 (
列名 データ型 オプション,
列名 データ型 オプション,
主キー
);

データ型、オプション、主キーというワードをこれから説明していきたいと思います。
説明の前に実際にテーブルを作れるサンプルコードです。

サンプルコード

CREATE TABLE item (
ItemID numeric(8, 0) unique not null,
ItemName character varying (20) not null,
Quantity numeric(8, 0),
primary key(ItemID)
);

データ型オプション主キーがどんなものかわかったかと思います。
それではデータ型とオプション、主キーについて説明していきます。

基本的なデータ型(DATA TYPE)

データ型にはいくつか種類があります。データ型を書き出すと大量になってしまい以下にまとめたので、詳しい説明や書き方は下記記事を参考にしていただければと思います。

こちらの記事で扱っているデータ型は、「numeric」で数値を扱い、「character varying」で文字列、「date」で日付を扱っています。

オプションについて

オプションはよく使うものを紹介します。

not null

ItemName character varying (20) not null

nullを許容しないカラムに対してnot nullをデータ型の次に明記します。

unique

ItemID numeric(8, 0) unique not null

unique(ユニーク)は唯一無二の値が入ります。連番など重複した値を入れたくない時に明記します。

default

上記サンプルコードでは登場しませんでしたが、こちらも比較的よくみかけるdefault(デフォルト)です。

defaultの書き方

defaultの書き方です。

-- defaultを使ってテーブルを作成
CREATE TABLE item (
num int
,itemId numeric(4, 0) default 1000
,ItemName varchar(20) default '商品名'
,DeliveryDate date default now()
);

-- numにだけ値を設定
insert into item(num) values(50);
-- テーブルを呼び出し
SELECT * FROM item;

※MySQLではdefault値は定数のみなため、now()などの関数は使用できない。(MySQL5.6で動作確認)
そのためMySQLの場合は以下のように記載してください。
,DeliveryDate DATETIME default '2020-04-03'

結果

上記defaultサンプルコードを実行した結果は以下になります。

numitemiditemnamedeliverydate
501000商品名2020-04-03

デフォルト値を設定しなかったnumを除いて全てデフォルトの値が入っていることが確認できました。data型のデフォルト値はnow()を使用して実行した日を取得しています(postgreSQLのみ)。今日は2020年04月03日なのでデフォルト値が正しく入っていることが確認できました。

主キー(PRIMARY KEY)について

主キー(PRIMARY KEY)はデータ行を特定できることを保証しています。IDなど唯一無にのものにつけられることが多いです。必須ではありませんがほとんどのテーブルに主キーは設定されています。
複数テーブルを結合する際には主キーを軸に結合したりします。

似たようなものに外部キー(FOREIGN KEY)もあります。興味のある方はググってみてください。

おわり

データベースの中身を少し操作できても、CREATE文がよくわかっていないと練習しようにももやもやしていたのでこれで先に進めそうです。