INSERTはテーブルに行を追加するコマンドであり、下記の基本構文に従って実行されます。
- INSERT基本構文
-
INSERT INTO テーブル名 (列名1, 列名2, …)
VALUES (値1, 値2, …);
※VALUESはVALUEではないので要注意
値1が列名1に、値2が列名2に、といった具合に指定された順番どおりにデータが1行追加されます。
文字型定数には、シングルクォーテーション(‘)を文字の前後に付け、数値型定数には数値の前後に何も付けません。
日付には、文字列と同じくシングルクォーテーションで囲みます。ただし、日付はさまざまな表現形式(’26 Jan 2010’や’10/01/26’など)があります。
INSERT INTO Staff (id, name, age, hire_date) VALUES ('0001', '山田太郎', 34, '2006-4-1',);
VALUESの後にカッコをつけて記述する値が、CREATE TABLE文によって定義された各列の順序どおりに指定されていれば、列名の表記を省略することができます。
- INSERT基本構文(列名省略)
- INSERT INTO テーブル名 VALUES (値1, 値2, …);
Staffテーブルが、id(社員番号)、name(氏名)、age(年齢)、hire_date(入社日)の順に列定義されていれば、以下のように記述できます。
INSERT INTO Staff VALUES ('0001', '山田太郎', 34, '2006-4-1');
他のテーブルからデータをコピーする
テーブルに行を追加する方法として、上記例のようにVALUES句で直接データを指定する以外に、他のテーブルにある行をSELECTしてINSERTする方法もあります。
- INSERT … SELECT基本構文(他のテーブルにある行をSELECTしてINSERTする)
- INSERT INTO テーブル名 (列名1, 列名2, …) SELECT 列A, 列B, … FROM テーブル名1, テーブル名2, … WHERE 条件式
SELECT文によって抽出された列A、列B、 …の値が、列名1、列名2、 …の順に格納されます。複数行が抽出された場合は、その複数行が挿入されます。
この方法を使えば、テーブルのバックアップを取ることができる他に、ある範囲のデータを他のテーブルに切り出すなどの操作ができます。
以下は、入社日が2010年4月1日以降の社員を、Young_Staffテーブルに挿入する例です。
INSERT INTO Young_Staff (id, name, age, hire_date) SELECT id, name, age, hire_date FROM Staff WHERE Staff.hire_date >= '2010-4-1';
上記した「INSERT基本構文(他のテーブルにある行をSELECTしてINSERTする)」では、WHERE句しか書いておりませんが、GROUP BY句など、どんなSQL構文も使うことができます。ただし、ORDER BY句は使っても効果はありません。