SQL INSERT

概要:このチュートリアルでは、SQL INSERT文を使用してデータテーブルにデータを追加する方法を学習します。

SQL INSERT文の紹介

SQLは、テーブルに1行または複数行を挿入できるINSERT文を提供します。INSERT文では、以下を行うことができます。

  1. テーブルに単一行を挿入する
  2. テーブルに複数行を挿入する
  3. テーブルから別のテーブルに行をコピーする。

次のセクションでは、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行を挿入する方法を示します。

employees_dependents_tables

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: 1Code language: SQL (Structured Query Language) (sql)

以下のSELECT文を使用して、行が正常に挿入されたかどうかを確認できます。

SELECT 
    *
FROM
    dependents
WHERE
    employee_id = 178;Code language: SQL (Structured Query Language) (sql)

試してみる

SQL INSERT one row example

テーブルに複数行を挿入する

単一の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)

試してみる

SQL INSERT multiple rows example

他のテーブルからの行のコピー

INSERT文を使用して、1つ以上のテーブルからデータをクエリし、次のように別のテーブルに挿入できます。

INSERT INTO table1 (column1, column2) 
SELECT
	column1,
	column2
FROM
	table2
WHERE
	condition1;Code language: SQL (Structured Query Language) (sql)

この構文では、サブセレクトと呼ばれるSELECTVALUES句の代わりに使用します。サブセレクトには結合を含めることができるため、複数のテーブルのデータを組み合わせることができます。ステートメントを実行すると、データベースシステムはデータを挿入する前に、まずサブセレクトを評価します。

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 copy rows from other tables example

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

このチュートリアルは役に立ちましたか?