この特集のトップページへ
Appendix B:SQLの基本文法

見出し B.3 INSERT

 INSERT文は,テーブルにレコードを追加する機能を備える。構文は次のとおりである。

○単一のレコードを追加する場合


   INSERT INTO テーブル名 (フィールド名1, フィールド名2, …) VALUES (値1, 値2, …)

○複数のレコードを追加する場合


   INSERT INTO テーブル名 (フィールド名1, フィールド名2, …) SELECT文

見出し B.3.1 単一のレコードを追加する
 単一のレコードを追加する場合は簡単である。たとえば,Table B-12に示すSampleTBというテーブルがあったとき,次のSQL文を実行すると,Table B-13のようにレコードが1つ追加される。


   INSERT INTO SampleTB (NAME, TEL) VALUES('Noboru Nakamura', '045-xxx-xxxx')

 なお,“(フィールド名1, フィールド名2, …)”の部分は,すべてのフィールド名を列挙しなくてもかまわない。省略されたフィールドは,レコードの新規作成時に,デフォルト値が格納される(このデフォルト値は,テーブル作成時に開発者が設定する。たとえば,Microsoft Accessの場合には“既定値”に設定した値である。もしオートナンバー型であれば,データベースエンジン側で新しい整数値が格納されることになる)。

 また,“(フィールド名1, フィールド名2, …)”の部分を省略してしまうこともできる。省略した場合には,テーブルに定義されたフィールドの順序ですべてのフィールドが指定されたものとみなされる。

Table B-12 SampleTBテーブル
NAME TEL
Fumitaka Osawa 0466-xx-xxxx
Hitoshi Yamamoto 03-xxxx-xxxx
Table B-13 レコードを追加したあとのSampleTBテーブル
NAME TEL
Fumitaka Osawa 0466-xx-xxxx
Hitoshi Yamamoto 03-xxxx-xxxx
Noboru Nakamura 045-xxx-xxxx

見出し B.3.2 複数のレコードの追加
 INSERT文では複数のレコードを追加することもできる。この場合,SELECT文で実行した結果を新規に追加するレコードのフィールドの値とみなす。

 たとえば,Table B-14に示すSampleAというテーブルとTable B-15に示すSampleBというテーブルがあるとする。このとき,次のSQL文を実行すると,SampleBテーブルはTable B-16のようになる。


   INSERT INTO SampleB (ID, NAME, TEL) 
          SELECT ID, NAME, TEL FROM SampleA WHERE ID >= 4
Table B-14 SampleAテーブル
ID NAME TEL
1 Fumitaka Osawa 0466-xx-xxxx
2 Hitoshi Yamamoto 03-xxxx-xxxx
3 Noboru Nakamura 045-xxx-xxxx
4 Kenichi Suzuki 045-xxx-xxxx
5 Akira Kobayashi 042-xxx-xxxx
6 Ken Kato 06-xxxx-xxxx
Table B-15 SampleBテーブル
ID NAME TEL
10 Yoko Suzuki 03-xxxx-xxxx
11 Reiko Kobayashi 0462-xx-xxxx
Table B-16 レコードを追加したあとのSampleBテーブル
ID NAME TEL
10 Yoko Suzuki 03-xxxx-xxxx
11 Reiko Kobayashi 0462-xx-xxxx
4 Kenichi Suzuki 045-xxx-xxxx
5 Akira Kobayashi 042-xxx-xxxx
6 Ken Kato 06-xxxx-xxxx

 単一のレコードを追加するのと同様,“(フィールド1, フィールド2, …)”の部分は,全部のフィールド名を列挙する必要はない。省略すれば,全フィールドを指定したものとみなされる。

 ここで挙げた例のように,INSERT文は,複数のレコードを一括して登録することができ,レコードをマージする場合に便利である。

 なお,ここではSampleASampleBという2つのテーブルの構造は同じだったが,何も同じ構造のテーブルでなければならないということではない。SELECT文の結果が先頭から順に,“(フィールド1, フィールド2, …)”の値に対応したレコードが作成されるだけなので,テーブルの構造が同じである必然性はないのである。

prev Appendix B 4/6 next
本文のトップへ | Appendix Bのトップへ