いつか、技術ブログを

新人SE(OJT中)が技術ブログを書きたがっているブログです

CREATE TABLE文の書き方(応用情報対策)

データベースのSQLのCREATE TABLE文の書き方について勉強したのでまとめます。

CREATE TABLE文とは

私は、CREATE TABLE文っていうのは表を作って一緒にデータも入れられる文だと勘違いしてたのですが、表のデータ型(文字・数字など)と制約(主キー制約、NOT NULL制約など)を定義する文というのが正解でした。
なので、データを入れるには、INSERT文を使う必要があります。
INSERT文についてはこちら→UPDATE文、INSERT文、DELETE文の基本知識と練習問題(応用情報対策) - いつか、技術ブログを

CREATE TABLE文の書き方

[ ]内は省略可能です

CREATE TABLE 表名(
    列名 データ型 [列制約やDEFAULT句],
    列名 データ型 [列制約やDEFAULT句], … ,
    [表制約],
    [表制約], … ,
)

例えば、こんな感じに書きます。(データ型、制約、DEFAULT句については後ほど説明します。)

CREATE TABLE 商品(
    商品番号 CHAR(4),
    商品名 NCHAR(10) NOT NULL,
    単価 INT(8),
    PRIMARY KEY(商品番号)
)

この例では、「商品番号」列、「商品名」列(NULLはダメだよっていう列制約つき)、「単価」列の3列を定義し、表制約として商品番号列の主キー制約を定義しています。

データ型とは

文字、整数、小数、日付、時間などのデータの形式のことです。
CHAR(4)と書いた時、カッコ内の4は文字数のことです。数字の場合は桁数を表します。
応用情報を受けるだけならそんなに詳しく知ってる必要はなくて、

  • CHARとつくものは文字列(CHAR, VARCHAR, NCHARなど)
  • INTは整数
  • DATEはそのまま日付(年月日)
  • TIMEはそのまま時間(時分秒)

ということが分かっていれば大丈夫だと思います。

DEFAULT句とは

DEFAULT句では、既定値を設定することができます。既定値にはNULLか定数を設定できます。 書き方は、

列名 データ型 DEFAULT NULL
または
列名 データ型 DEFAULT 定数

という感じです。
既定値は、INSERT文で値を指定しない列があった時とかに使われます。

表制約・列制約とは

制約は、「この列はこういう条件に従ってデータを入れてね」という決まりみたいなものです。
列制約は、列名に続けてNOT NULLなどの制約を書きます。
表制約は、列名を定義し終わったら、カンマ(,)の後に、PRIMARY KEY(列リスト)という感じで書きます。表制約と表制約の間にもカンマが必要です。カッコ内には、列(1個から複数)や、CHECK制約なら条件を書きます。
制約には以下の種類があります。

①主キー制約

主キーに設定する制約です。主キーは、一意でなければいけない(重複した値(の組み合わせ)があってはいけない)、NULLではいけない、という決まりがあります。
列制約の場合:PRIMARY KEY
表制約の場合:PRIMARY KEY(列名リスト)

②非ナル制約

NULL(空値)ではならないという制約です。表制約では定義せず、列制約のみです。
列制約の場合:NOT NULL

③一意性制約

重複した値をとらないようにする、という制約です。
列制約の場合:UNIQUE
表制約の場合:UNIQUE(列名リスト)

④検査制約

条件にあった値でなければいけない、という制約です。
列制約の場合:CHECK(条件)
表制約の場合:CHECK(条件)

⑤参照制約

外部キーを設定する制約です。
列制約の場合:REFERENCES 外部の表名 [外部の表名の列名]
表制約の場合:FOREIGN KEY 列名 REFERENCES 外部の表名 [外部の表名の列名]