PostgreSQLでテーブルにデータを登録する【INSERT】

SQL

INSERT

テーブルに新しい行を追加するには、SQLコマンドの「INSERT」を使用します。
「INSERT」の基本的な構文は以下の通りです。

INSERT INTO テーブル名 [(列名1,列名2.・・・)]
  { VALUES (値1,値2,・・・) [, ・・・] | クエリ } ;

テーブル名で指定したテーブルに新しい行を挿入します。

列名を指定する場合は、列の順序は自由に指定できます。また、すべての列を指定しなくても良いですが、指定しなかった列はデフォルト値(指定がなければNULL)がセットされます。
列名を全く指定しなかった場合は、テーブル内の全ての列を宣言時の順序で並べたものがデフォルトとして使用されます。

VALUES句で指定した値は、列名リストの左から順に関連付けられます。
またVALUES句の代わりにクエリで取得した値を登録することもできます。

テーブルに行を登録するには、そのテーブルに対してINSERT権限が必要です。

INSERTコマンドの詳細は、公式ドキュメントを参照してください。

テーブルに行を挿入してみる

実際に以下のようなテーブル「testtbl」に新しい行を挿入する例をいくつか挙げてみます。

列名制約
idcharacter varying(6)not null
namecharacter varying(20)not null
telcharacter varying(20)
emailcharacter varying(40)
scorenumeric(3,0)

列名を指定して挿入する

列名リストに全ての列を指定して新しい行を挿入してみます。

INSERT INTO testtbl (id, name, tel, email, score)
  VALUES ('000001', '山田 太郎', '9999-99-9999', 'xxxx@xxx.xxx.xxx', 100) ;

列の指定順序は自由です。実際に実行すると以下の通りです。

insert 列名をすべて指定

SELECTコマンドで確認すると、データが登録されています。

また、一部の列名のみ指定して行を挿入することも可能です。
「id」「name」「email」列のみ指定して「INSERT」してみます。

INSERT INTO testtbl (id, name, email)
 VALUES ('000002', '佐藤 二郎', 'yyyy@xxx.xxx.xxx');

実際に実行すると以下のようになります。

insert 一部の列指定

指定されなかった列にはデフォルト値が設定されます。今回の例ではデフォルト値は指定されていないため、NULLが登録されています。

psqlにてクエリの結果にNULL値が表示されない場合があります。今回は事前に以下のコマンドを実行し「(null)」と表示されるよう設定しています。

\pset null '(null)'

列名を省略して挿入する

列名の指定を省略して登録してみます。

INSERT INTO testtbl
 VALUES ('000003', '鈴木 三郎', '8888-88-8888', 'zzzz@xxx.xxx.xxx', 75);
insert 列名を省略して登録

指定した値は、テーブル定義時の列の順序で登録されます。
また、一部の列の値のみを指定した場合も同様で、足りない列にはデフォルト値(指定がなければNULL)が登録されます。

INSERT INTO testtbl
 VALUES ('000004', '森山 四郎', '7777-77-7777');
insert 列名を諸略して登録(一部の列のみ)

複数の行を一度に登録する

ひとつの「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);
insert 複数行登録

クエリを利用して挿入する

VALUES句を使わず、クエリを利用して行を挿入することもできます。
例えば、「id」が「000002」の行をコピーする場合の例です。

INSERT INTO testtbl
 SELECT '000007' as id, name, tel, email, score FROM testtbl WHERE id = '000002';
insert クエリを利用して登録

クエリの結果が複数行だった場合、それぞれの行が登録されます。
その際は、プライマリキーが重複しないよう注意する必要があります。

以上で「INSERT」コマンドの解説は完了です。

タイトルとURLをコピーしました