概要:このチュートリアルでは、SQL INSERT文を使用してデータテーブルにデータを追加する方法を学習します。
SQL INSERT文の紹介
SQLは、テーブルに1行または複数行を挿入できるINSERT
文を提供します。INSERT
文では、以下を行うことができます。
- テーブルに単一行を挿入する
- テーブルに複数行を挿入する
- テーブルから別のテーブルに行をコピーする。
次のセクションでは、INSERT
文の各機能について詳しく説明します。
テーブルへの1行の挿入
テーブルに1行を挿入するには、INSERT
文の以下の構文を使用します。
INSERT INTO table1 (column1, column2,...)
VALUES
(value1, value2,...);
Code language: SQL (Structured Query Language) (sql)
テーブルに新しい行を挿入する際には、注意すべき点がいくつかあります。
- まず、値の数は列の数と一致する必要があります。さらに、列と値は対応している必要があります。データベースシステムは、リスト内のそれぞれの位置によってそれらを照合します。
- 次に、新しい行を追加する前に、データベースシステムはすべての整合性制約(例:外部キー制約、主キー制約、チェック制約、NOT NULL制約)を確認します。これらの制約のいずれかが違反されている場合、データベースシステムはエラーを発行し、テーブルに新しい行を挿入することなくステートメントを終了します。
値の順序がテーブル内の列の順序と一致する場合は、列を指定する必要はありません。INSERT INTO
句で列リストを省略した、以下のINSERT
文を参照してください。
INSERT INTO table1
VALUES
(value1, value2,...);
Code language: SQL (Structured Query Language) (sql)
しかし、これは良い方法とはみなされません。
新しい行を挿入する際にINSERT
文で列とその値を指定しない場合、その列はテーブル構造で指定されたデフォルト値を取ります。デフォルト値は、0、シーケンスの次の整数値、現在時刻、NULL値などです。以下のステートメントを参照してください。
INSERT INTO (column1, column3)
VALUES
(column1, column3);
Code language: SQL (Structured Query Language) (sql)
この構文では、column2
はデフォルト値を取ります。
テーブルへの1行の挿入例
サンプルデータベースのemployees
テーブルとdependents
テーブルを使用して、テーブルに1行を挿入する方法を示します。

dependents
テーブルに新しい行を挿入するには。
INSERT INTO dependents (
first_name,
last_name,
relationship,
employee_id
)
VALUES
(
'Dustin',
'Johnson',
'Child',
178
);
Code language: SQL (Structured Query Language) (sql)
INSERT
文でdepartment_id
列を使用しませんでした。これは、dependent_id
列が自動増分列であるため、データベースシステムは新しい行を挿入する際に次の整数番号をデフォルト値として使用します。
employee_id
列は、dependents
テーブルをemployees
テーブルにリンクする外部キーです。新しい行を追加する前に、データベースシステムはemployees
テーブルのemployee_id
列に値178が存在するかどうかを確認し、外部キー制約が違反されていないことを確認します。
行が正常に挿入されると、データベースシステムは影響を受けた行数を返します。
Affected rows: 1
Code language: SQL (Structured Query Language) (sql)
以下のSELECT文を使用して、行が正常に挿入されたかどうかを確認できます。
SELECT
*
FROM
dependents
WHERE
employee_id = 178;
Code language: SQL (Structured Query Language) (sql)

テーブルに複数行を挿入する
単一のINSERT
文を使用して複数行を挿入するには、以下の構成を使用します。
INSERT INTO table1
VALUES
(value1, value2,...),
(value1, value2,...),
(value1, value2,...),
...;
Code language: SQL (Structured Query Language) (sql)
たとえば、dependents
テーブルに2行を挿入するには、以下のクエリを使用します。
INSERT INTO dependents (
first_name,
last_name,
relationship,
employee_id
)
VALUES
(
'Cameron',
'Bell',
'Child',
192
),
(
'Michelle',
'Bell',
'Child',
192
);
Code language: SQL (Structured Query Language) (sql)
データベースシステムは、影響を受けた行数として2を返します。以下のステートメントを使用して結果を確認できます。
SELECT
*
FROM
dependents
WHERE
employee_id = 192;
Code language: SQL (Structured Query Language) (sql)

他のテーブルからの行のコピー
INSERT
文を使用して、1つ以上のテーブルからデータをクエリし、次のように別のテーブルに挿入できます。
INSERT INTO table1 (column1, column2)
SELECT
column1,
column2
FROM
table2
WHERE
condition1;
Code language: SQL (Structured Query Language) (sql)
この構文では、サブセレクトと呼ばれるSELECT
をVALUES
句の代わりに使用します。サブセレクトには結合を含めることができるため、複数のテーブルのデータを組み合わせることができます。ステートメントを実行すると、データベースシステムはデータを挿入する前に、まずサブセレクトを評価します。
dependents
テーブルと同じ構造を持つdependents_archive
という名前のテーブルがあるとします。次のステートメントは、dependents
テーブルからdependents_archive
テーブルにすべての行をコピーします。
INSERT INTO dependents_archive
SELECT
*
FROM
dependents;
Code language: SQL (Structured Query Language) (sql)
以下のステートメントを使用して、挿入操作を確認できます。
SELECT
*
FROM
dependents_archive;
Code language: SQL (Structured Query Language) (sql)

これで、SQL INSERT文を使用してテーブルに1行または複数行を挿入する方法が理解できたはずです。