【SQL】INSERT文の書き方(基本からSELECT文を使用した応用まで)

SQL

INSERT文とは

SQLは、指定したテーブルに対してデータを追加するためのSQLになります。
INSERT文には、値を指定して登録する方法と、別テーブルの情報を登録する方法があります。
今回の記事では、上記2パターンの登録方法を説明していこうと思います。

INSERT文の基本構文

INSERT文の列名記載する基本構文

INSERT INTO テーブル名 (テーブルの列名1 [, テーブルの列名2 ] ...)
VALUES (‘値1′[, ‘値2’ ]...);

テーブル名の後ろに値を設定する「テーブルの列名」をカンマ区切りにて指定を行ないます。
列名の後に「VALUES」と記載し「設定したい値」をカンマ区切りにて指定します。
この時に「列名」の順番と「登録したい値」の順番を合わせる必要があります。

INSERT文の列名記載する基本構文の例

INSERT INTO Employee (id, name, age, department, joining_day) VALUES (1, '山田 太郎', 36, '営業','2022-04-01');
INSERT INTO Employee (id, name, age, department, joining_day) VALUES (2, '鈴木 二郎', 50, '経理','2022-12-24');
INSERT INTO Employee (id, name, age, department, joining_day) VALUES (3, '佐藤 一', 22, null,'2009-02-01');
INSERT INTO Employee (id, name, department, joining_day) VALUES (4, '加藤 誠司', '情報システム部','1990-11-01');
INSERT INTO Employee (id, name, age, department, joining_day) VALUES (5, '佐野 大輔', 22, null,date(CURRENT_TIMESTAMP));

上記SQLは、Employeeテーブルに従業員情報を登録するSQLになっています。
1〜2行目は、一つずつテーブルに存在しているカラムを全て指定してのインサート文になっています。
3行目は、department(部署)に対して「null」未入力を設定しています。
4行目は、age(年齢)のカラムを指定せずにインサート文を記載しています。
5行目は、joining_day(入社日)に対して、「date(CURRENT_TIMESTAMP)」と言う現在日付を設定するSQL関数を使用して登録しています。

INSERT文の列名記載する基本構文の実行結果

例のSQLを実行することによって以下のような情報を登録することが出来ます。

idnameagedepartmentjoining_day
1山田 太郎36営業2022-04-01
2鈴木 二郎50経理2022-12-24
3佐藤 一22(null)2009-02-01
4加藤 誠司(null)情報システム部1990-11-01
5佐野 大輔22(null)2023-03-05

INSERT文の列名省略する基本構文

INSERT INTO テーブル名 VALUES (‘値1′[, ‘値2’ ]...);

INSERT文の基本構文から列名部分を省略してデータを登録することが出来ます。
このSQLの注意点なのですが、テーブルのカラムの順番・カラムの数が一致する必要があるので、環境ごとにカラムの順番が違う場合や、テーブルのカラムを追加する際などに使用が出来なくなる可能性が多いため、実務などで使用されることはほぼないと思われます。

INSERT文の列名省略する基本構文例

INSERT INTO Employee VALUES (1, '山田 太郎', 36, '営業','2022-04-01');

上記SQLのように、列名を指定せずに記載することができるようになっています。

INSERT文の列名省略する基本構文の実行結果

例のSQLを実行することによって以下のような情報を登録することが出来ます。

idnameagedepartmentjoining_day
1山田 太郎36営業2022-04-01

SELECT文を利用したINSERT文

SELECT文を利用したINSERT文

INSERT INTO テーブル名 (テーブルの列名1 [, テーブルの列名2 ] ...)
SELECT文;

INSERT文には、列名指定の後にSELECT文を指定することによって、別テーブルの値を取得してコピーテーブルを作成することや、集計テーブルを作成することができるようになっています。

SELECT文を利用したINSERT文例

INSERT INTO employee_joining_count(joining_day, employee_count)
SELECT DATE_FORMAT(joining_day, "%Y-%m") as joining_day, COUNT(id) as count
FROM Employee
GROUP BY joining_day;

上記SQLは、SELECT文にて、入社年月ごとの社員数を集計テーブルに登録するようなSQLになっています。

SELECT文を利用したINSERT文の実行結果

例のSQLを実行することによって以下のような情報を登録することが出来ます。

joining_dayemployee_count
(null)3
2022-121
2023-031

コメント

タイトルとURLをコピーしました