INSERT INTO VALUES() ステートメント

テーブルの作成方法は理解できました。次に、SQL クエリを使用してテーブルにデータを追加する方法を詳しく見てみましょう。

実際、これを行うのは非常に簡単ですが、いくつかのニュアンスがあります。テーブルにデータを挿入するための最も単純なオプションでは、次の 2 つのことを指定する必要があります。

  • 列名
  • 列の値(データ)

多くの場合、データの挿入時に列には指定されていないデフォルト値が設定されるため、列名を指定する必要があります。そして通常、すべてのテーブルには行 ID などのそのような列が少なくとも 1 つあります。

テーブルにデータを挿入するクエリの一般的な形式は次のようになります。

INSERT INTO table (column1, column2, column3) VALUES
    (value1, value2, value3),
    (value1, value2, value3),
    (value1, value2, value3);

たとえば、ユーザー テーブルに新しいレコードを挿入する場合、クエリは次のようになります。

INSERT INTO user (name, level, created_time) VALUES
	('Rabinovich', 5, ‘2022-06-06’);

INSERT INTO SELECT ステートメント

テーブルにデータを挿入するもう 1 つの一般的なシナリオは、別のテーブル、スキーマ、または DBMS からデータを取得することです。

これを行うには、別の INSERT INTO クエリ形式があり、VALUES 部分の代わりにデータを選択するクエリを指定できます。

このようなリクエストの一般的な形式は次のとおりです。

INSERT INTO table (column1, column2, column3)
SELECT-request;

すべてのユーザーを従業員テーブルからユーザーテーブルに追加するクエリを作成してみましょう。

INSERT INTO user (name, created_time)
   SELECT employee.name, employee.join_date
   FROM employee;

従業員テーブルにはさまざまなデータがありますが、その中から名前と出社時刻の 2 つのフィールドのみを選択します。

また、ユーザー テーブルでは、ユーザー レベル - level を指定する必要があります。従業員テーブルには従業員のレベルがないため、ユーザー テーブルにはレベル フィールドのデフォルト値があることを利用します。レベルを指定しないだけで、SQL によってデフォルト値が設定されます。

デフォルト値に満足できず、レベルを 99 に設定し、user.created_time を今日の日付に置き換えると仮定すると、次のように記述できます。

INSERT INTO user (name, level, created_time)
   SELECT employee.name, 99, CURDATE()
   FROM employee;

他にもできることはたくさんありますが、今のところはこれで十分だと思います。詳細については、MySQL の公式ページをご覧ください。