【SQL】INSERT文の書き方と使い方の基本
この記事では、データベースにデータを追加するSQLのINSERT文について解説します。基本的な書き方から、複数のデータを一度に登録する一括挿入、テーブル同士を関連付ける外部キーの指定、値が存在しないことを示すNULLの扱い方まで、具体的なサンプルコードを用いて初心者にもわかりやすく説明します。
開発環境
- OS: Windows10
- DatabaseGUI: TablePlus
- MySQL: 8.0.42
INSERT文とは
INSERT文は、データベースの「テーブル」に、新しいデータを1行追加(挿入)するための命令文です。
データベースとは、コンピュータ上でデータを整理して保管しておく場所のことです。そして、そのデータベースを操作するための専用の言語が「SQL」です。
データベースの中には、「テーブル」と呼ばれる、Excelのシートのような表形式のデータ入れがあります。このテーブルは、行と列で構成されています。
INSERT文は、このテーブルに新しい情報を1行分まるごと追加したい時に使用します。例えば、会員情報を管理するテーブルに、新しい会員の情報を登録する、といった場面で使われます。
INSERT文の基本構文
INSERT文は、データベースのテーブルに新しいデータを1行追加(登録)するために使用する命令です。どのテーブルのどのカラムに、どのような値を追加するのかを明確に指定する必要があります。
構文は、主に2つの部分から構成されています。
-
INSERT INTO テーブル名 (カラム名1, カラム名2,...)この部分では、データを追加したい「テーブル名」と、そのテーブル内のどの「カラム(列)」に値を入れるのかを指定します。カラム名はカンマ(,)で区切って複数指定することが可能です。 -
VALUES (値1, 値2,...)VALUESの後に続く括弧の中に、実際に追加する値を指定します。この値の順序は、先に指定したカラム名の順序と正確に一致させる必要があります。つまり、「値1」が「カラム名1」に、「値2」が「カラム名2」に対応します。値は、対象となるカラムのデータ型(数値、文字列など)に適合した形式で記述します。
1INSERT INTO 2 テーブル名 (カラム名1, カラム名2,...) 3VALUES 4 (値1, 値2,...);
サンプルコード
ここでは、データベースのテーブルに新しいデータを追加するための基本的なSQL命令である INSERT INTO 文の使い方を学びます。具体的には、学校のクラスと生徒の情報をテーブルに登録する例を見ていきましょう。
sql/chapter02/01.sql
このコードは、classes という名前のテーブルに、新しいクラスのデータを1件追加する例です。
1-- classes テーブルにクラスを追加 2INSERT INTO 3 classes (name) 4VALUES 5 ('1年A組');
INSERT INTO classes (name) は、「classesテーブルのnameという列(カラム)にデータを追加します」という命令です。
VALUES ('1年A組') は、name列に追加する具体的な値が「1年A組」であることを指定しています。
このSQLを実行すると、classesテーブルに新しい行が1つ作られ、そのname列に「1年A組」というデータが保存されます。
sql/chapter02/02.sql
次に、students というテーブルに新しい生徒のデータを1件追加します。
1-- students テーブルに生徒を追加 2-- クラスIDを使って外部キーを指定 3INSERT INTO 4 students (last_name, first_name, class_id) 5VALUES 6 ('山田', '太郎', 1);
INSERT INTO students (last_name, first_name, class_id) は、「studentsテーブルのlast_name(姓)、first_name(名)、class_id(クラスID)の3つの列にデータを追加します」という意味です。
VALUES ('山田', '太郎', 1) は、指定した列の順番に合わせて、それぞれ「山田」「太郎」「1」という値を追加することを示しています。
class_id の 1 は、この生徒がどのクラスに所属しているかを示すための番号です。これにより、IDが1のクラス(先ほど追加した「1年A組」など)と生徒のデータを関連付けることができます。このように、他のテーブルのIDを参照する列を「外部キー」と呼びます。
sql/chapter02/03.sql
一度の命令で、複数のデータをまとめて追加することも可能です。これを一括挿入と呼びます。
1-- classes テーブルにクラスを一括挿入 2INSERT INTO 3 classes (name) 4VALUES 5 ('1年B組'), 6 ('1年C組'), 7 ('1年D組'); 8 9
VALUES の後に、追加したいデータの組をカンマ(,)で区切って並べることで、複数のデータを一度に追加できます。
この例では、「1年B組」「1年C組」「1年D組」の3つのクラスが classes テーブルにまとめて追加されます。データを一つずつ追加するよりも効率的な方法です。
sql/chapter02/04.sql
生徒のデータも同様に一括で追加できます。
1-- students テーブルに生徒を一括挿入 2INSERT INTO 3 students (last_name, first_name, class_id) 4VALUES 5 ('佐藤', '太郎', 1), 6 ('鈴木', '太郎', 1), 7 ('高橋', '太郎', 1), 8 ('田中', '太郎', 1), 9 ('伊藤', '二郎', 2), 10 ('渡辺', '二郎', 2), 11 ('山本', '二郎', 2), 12 ('中村', '二郎', 2), 13 ('小林', '三郎', 3), 14 ('加藤', '三郎', 3), 15 ('吉田', '三郎', 3), 16 ('山田', '三郎', 3), 17 ('佐々木', '四郎', 4), 18 ('山口', '四郎', 4), 19 ('松本', '四郎', 4), 20 ('井上', '四郎', 4), 21 ('木村', '四郎', 4), 22 ('林', '太郎', NULL), 23 ('斎藤', '二郎', NULL), 24 ('清水', '三郎', NULL); 25
このコードは、studentsテーブルに多数の生徒データを一度に追加しています。
各生徒のデータには、所属するクラスを示すclass_idが指定されています。例えば、('佐藤', '太郎', 1) はクラスIDが1のクラスに所属することを示します。
最後の3名のように、class_idにNULLが指定されているデータもあります。NULLは「値が存在しない」ことを示す特別な値です。この場合、まだクラスに配属されていない、クラス未定の生徒であることを表しています。
おわりに
この記事では、INSERT INTO テーブル名 (カラム名) VALUES (値)という基本構文でテーブルに新しいデータを1行追加する方法を解説しました。また、VALUES句に複数の値の組をカンマで区切って記述することで、一度に多くのデータを登録できる一括挿入の方法も学びました。さらに、class_idのような外部キーでテーブル同士を関連付ける方法や、値が存在しない場合にNULLを指定する扱い方についても確認しました。