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句は使っても効果はありません。