【初級編⑮】SQLのINSERT文でレコードを追加する

テーブルにレコードを追加するには、SQLの「INSERT」というコマンドを使用します。Management StudioのGUIから操作した時にも、実は裏で自動的にこのINSERT文が実行されています。今回はこのINSERT文を説明したいと思います。

対象テーブルのスキーマ

レコードを追加するテーブルは、画像で示した社員マスタを使用します。
社員マスタ

全部で7項目(7列)あります。データベースのデータはレコード、つまり行単位が原則になりますので、基本的にはこの7項目それぞれに対して値をセットする必要があります。それでは、このテーブルに対してレコードを追加していきましょう。

INSERT文の構文

INSERT文の構文は次のとおりです。

INSERT INTO の後ろに対象のテーブル名を指定します。そして、VALUESの後ろに、実際にセットする値をカンマ区切りで指定し、これをカッコで囲みます。

この書き方の場合、対象テーブルの列の定義の順番に合わせて値を並べないといけません。実際に試してみると、確かに1レコード登録されていて、列の順番通りに値がセットされていることが分かります。

INSERT結果

なお、この状態でもう一度実行するともう1回登録されてしまいます。ただ、このテーブルの場合社員番号で主キー違反になり、結果的には2レコード登録されることはありません。

もう一度実行するともう一度登録される

このINSERT文の書き方だと、テーブルの項目の並び順の通りに値を指定しているので、値を指定する順番を間違えると(場合によっては)エラーになります。

INSERT結果NG

これだと非常に間違いやすいので、次に示すように通常は値をセットする対象の列名も合わせて指定します。

列名を指定したINSERT文の構文

INSERT文に、値の指定と同様に列名もカンマ区切りで記述することで、どの列に対して値をセットするのかを指定することができます。

このようにINSERT INTO テーブル名の後ろに、列名をカンマ区切りで指定しカッコで囲みます。すると、列名1には値1がセットされ、列名2には値2がセット、という風に左から順番に対応付けられます。この書き方だと、対象テーブルの列定義の順番は無視することができます。また、最初の書き方だといつのまにか列が追加されていたりしてもSQLを見ただけでは対応しているのかどうかも分からないので、特に理由が無ければ列名の指定は必ずするようにした方がいいです。

列名の指定をすれば順不同

列の指定を省略した場合

列名を指定する書き方の場合は、値をセットしたい項目のみ記述することができますので、列の指定を省略することもできます。省略された列には初期値がセットされることになります。

初期値とは2つあり、①スキーマ定義で当該列に対してDEFAULT制約で指定した値、又は②DEFAULT制約が無い場合はNULL、となります。今回のテーブルの場合は、生年月日がgetdate()・・・現在日時、給料が0、部署コードが”・・・空文字となっています。

DEFAULT制約

それではこの3列を省略してINSERTしてみます。

INSERTで省略したらDEFAULT値セット

省略した項目に初期値がセットされていることが分かります。