6.1. データの挿入

テーブルは、作成時にはデータを含んでいません。 データベースを利用価値のあるものにするには、まずデータを挿入する必要があります。 理論的には、データは一度に1行ずつ挿入されます。 もちろんユーザは複数行に挿入することもできますが、一度に1行未満を挿入することはできません。 列の値が一部しかわかっていない場合でも、1行全体を作成しなければなりません。

新規の行を作成するには、INSERTコマンドを使用します。このコマンドでは、テーブル名とテーブルの各列の値を指定する必要があります。 例えば、第5章のproductsテーブルの例で考えてみましょう。

CREATE TABLE products (
    product_no integer,
    name text,
    price numeric
);

この場合、行を挿入するためのコマンドは以下のようになります。

INSERT INTO products VALUES (1, 'Cheese', 9.99);

データ値は、テーブルで列が表示される順序に従ってカンマで区切って列挙します。 通常、データ値はリテラル(定数)ですが、スカラ式も使用できます。

上記の構文には、テーブル内の列の順序を知っていなければならないという難点があります。 これを避けるには、列を明示的に列挙する方法があります。 例えば、以下の2つのどちらのコマンドでも上記のコマンドと同等の効果が得られます。

INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', 9.99);
INSERT INTO products (name, price, product_no) VALUES ('Cheese', 9.99, 1);

多くのユーザは常に列名を列挙する方法が優れていると考えています。

値がわからない列については、省略することができます。 省略した列には、デフォルト値が挿入されます。 以下に例を示します。

INSERT INTO products (product_no, name) VALUES (1, 'Cheese');
INSERT INTO products VALUES (1, 'Cheese');

後者はPostgreSQLの拡張機能です。 これによって、列には左から順に指定されただけの値が挿入され、残りにはデフォルト値が挿入されます。

明確にするため、列ごと、あるいは行全体についてデフォルト値を明示的に要求することもできます。

INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', DEFAULT);
INSERT INTO products DEFAULT VALUES;

単一コマンドで複数行を挿入することができます。

INSERT INTO products (product_no, name, price) VALUES
    (1, 'Cheese', 9.99),
    (2, 'Bread', 1.99),
    (3, 'Milk', 2.99);

ティップ: 一度に大量のデータを挿入する場合はCOPYコマンドを検討してください。 INSERTコマンドほどの柔軟性はありませんが、効率的です。 大量のデータをロードする性能を向上するためについて、詳細は項13.4を参照してください。