INSERT
テーブルに新しい行を追加するには、SQLコマンドの「INSERT」を使用します。
「INSERT」の基本的な構文は以下の通りです。
INSERT INTO テーブル名 [(列名1,列名2.・・・)]
{ VALUES (値1,値2,・・・) [, ・・・] | クエリ } ;
テーブル名で指定したテーブルに新しい行を挿入します。
列名を指定する場合は、列の順序は自由に指定できます。また、すべての列を指定しなくても良いですが、指定しなかった列はデフォルト値(指定がなければNULL)がセットされます。
列名を全く指定しなかった場合は、テーブル内の全ての列を宣言時の順序で並べたものがデフォルトとして使用されます。
VALUES句で指定した値は、列名リストの左から順に関連付けられます。
またVALUES句の代わりにクエリで取得した値を登録することもできます。
テーブルに行を登録するには、そのテーブルに対してINSERT権限が必要です。
テーブルに行を挿入してみる
実際に以下のようなテーブル「testtbl」に新しい行を挿入する例をいくつか挙げてみます。
列名 | 型 | 制約 |
---|---|---|
id | character varying(6) | not null |
name | character varying(20) | not null |
tel | character varying(20) | |
character varying(40) | ||
score | numeric(3,0) |
列名を指定して挿入する
列名リストに全ての列を指定して新しい行を挿入してみます。
INSERT INTO testtbl (id, name, tel, email, score)
VALUES ('000001', '山田 太郎', '9999-99-9999', 'xxxx@xxx.xxx.xxx', 100) ;
列の指定順序は自由です。実際に実行すると以下の通りです。

SELECTコマンドで確認すると、データが登録されています。
また、一部の列名のみ指定して行を挿入することも可能です。
「id」「name」「email」列のみ指定して「INSERT」してみます。
INSERT INTO testtbl (id, name, email)
VALUES ('000002', '佐藤 二郎', 'yyyy@xxx.xxx.xxx');
実際に実行すると以下のようになります。

指定されなかった列にはデフォルト値が設定されます。今回の例ではデフォルト値は指定されていないため、NULLが登録されています。
列名を省略して挿入する
列名の指定を省略して登録してみます。
INSERT INTO testtbl
VALUES ('000003', '鈴木 三郎', '8888-88-8888', 'zzzz@xxx.xxx.xxx', 75);

指定した値は、テーブル定義時の列の順序で登録されます。
また、一部の列の値のみを指定した場合も同様で、足りない列にはデフォルト値(指定がなければNULL)が登録されます。
INSERT INTO testtbl
VALUES ('000004', '森山 四郎', '7777-77-7777');

複数の行を一度に登録する
ひとつの「INSERT」コマンドで、複数の行を挿入することもできます。
その場合は、VALUES句の後に「,」で接続して複数行分の値を指定すればOKです。
INSERT INTO testtbl (id, name, tel, email, score)
VALUES ('000005', '田中 五郎', '6666-66-6666', 'aaaa@xxx.xxx.xxx', 80)
,('000006', '川原 六郎', '5555-55-5555', 'bbbb@xxx.xxx.xxx', 90);

クエリを利用して挿入する
VALUES句を使わず、クエリを利用して行を挿入することもできます。
例えば、「id」が「000002」の行をコピーする場合の例です。
INSERT INTO testtbl
SELECT '000007' as id, name, tel, email, score FROM testtbl WHERE id = '000002';

クエリの結果が複数行だった場合、それぞれの行が登録されます。
その際は、プライマリキーが重複しないよう注意する必要があります。
以上で「INSERT」コマンドの解説は完了です。