テーブルは、作成時にはデータを含んでいません。 データベースを利用価値のあるものにするには、まずデータを挿入する必要があります。 概念的には、データは一度に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);
また、問い合わせの結果(0行かも、1行かも、複数行かもしれない)を挿入することもできます。
INSERT INTO products (product_no, name, price) SELECT product_no, name, price FROM new_products WHERE release_date = 'today';
これにより、挿入する行を計算するためにSQLの問い合わせ機構(7章問い合わせ)の全機能が提供されます。
一度に大量のデータを挿入する場合はCOPYコマンドの使用を検討してください。 INSERTコマンドほどの柔軟性はありませんが、より効率的です。 大量のデータをロードする性能を向上することについて、詳細は14.4. データベースへのデータ投入を参照してください。