SQL│INSERT文でテーブルにデータを登録する(レコードの追加)

今回は、SQLのINSERT文を使ってテーブルにデータを登録する方法を説明します。

INSERT文は、SQLの操作の中でも使用頻度の高い命令文です。

この記事では、INSERT文で登録する元データのExcelの画像と併せて、実際にMySQLとPostgreSQLにデータ登録する実画像を用いて説明します。

登録するデータをExcelで可視化してご覧いただくことで、ご理解しやすくなります。

目次

SQL_データの登録(INSERET文)

この記事で説明するINSERT文を使ったデータの登録は、以前の記事で作成したテーブルを使います。参考までに紹介しておきます。

テーブルの元データのExcel

テーブルに登録する元データは下記のExcelの赤枠の部分です。この計6レコード(9列)分のデータをRDBMSに登録するSQL文を紹介します。

赤枠個所がRDBMSに登録するデータ

RDBMSのテーブル

RDBMSには、上記のデータを登録するためのテーブルはすでに存在していますので、テーブルの作成は行いません。

なおテーブル名は「Worker」です。

RDBMSに作成済みのテーブル「Worker」

データ登録のINSERT文

テーブルにデータを登録するときには、[INSERT]というSQL文を実行します。

なお、INSERTは実際に登録するデータの他、登録先の列名を「記述する方法」「省略する方法」の2通りあります。それぞれ、紹介します。

MySQLとPostgreSQLで基本的な文法は一緒ですが、冒頭の1行のみ異なります。下記のSQL文でご確認ください。

列名を記述するINSERT文

START TRANSACTION; --MySQL
BEGIN TRANSACTION; --PostgreSQL

INSERT INTO Worker (worker_id,name,birthday,gender,prefecture,hire_date,department,wage,position)
VALUES('10040','青柳 森勝','1997-10-16',1,'岐阜県大垣市','2020-04-01',1,8,1);

INSERT INTO Worker (worker_id,name,birthday,gender,prefecture,hire_date,department,wage,position)
VALUES('10041','田代 春実','1995-07-24',2,'奈良県大和郡山市','2020-04-01',2,3,3);

INSERT INTO Worker (worker_id,name,birthday,gender,prefecture,hire_date,department,wage,position)
VALUES('10042','菅野 兼一','2001-02-06',1,'東京都台東区','2020-04-01',2,5,4);

INSERT INTO Worker (worker_id,name,birthday,gender,prefecture,hire_date,department,wage,position)
VALUES('10043','関根 和茂','1998-02-13',1,'北海道河東郡音更町','2020-06-01',3,4,4);

INSERT INTO Worker (worker_id,name,birthday,gender,prefecture,hire_date,department,wage,position)
VALUES('10044','三上 智治','2000-04-28',1,'京都府京都市','2020-07-01',4,1,5);

INSERT INTO Worker (worker_id,name,birthday,gender,prefecture,hire_date,department,wage,position)
VALUES('10045','福永 梨絵','1996-06-09',2,'愛知県岡崎市','2020-12-01',5,3,4);

COMMIT;
補足説明
INSERT INTO Worker (worker_id,name,birthday,gender,prefecture,hire_date,department,wage,position)
VALUES('10040','青柳 森勝','1997-10-16',1,'岐阜県大垣市','2020-04-01',1,8,1);

列名を記述したINSERT文では、実際のRDBMS内のテーブルの列の並びに関わらず、SQL文で記述した列の順番に基づき、データを登録することができます。

INSERT INTO Worker (name)
VALUES('青柳 森勝');

また、上記のように列を指定して単独でデータを登録することもできますが、基本的にテーブルへのデータ登録はレコード単位で実行されます。そのため、NOT NULL制約が設定されている列があれば、無視してデータ登録することはできません。

つまり、この例では[name]列以外の列で、NOT NULL制約が設定されている列が存在していれば、エラーが発生します。

NOT NULL制約違反

列名を省略するINSERT文

START TRANSACTION; --MySQL
BEGIN TRANSACTION; --PostgreSQL

INSERT INTO Worker
VALUES('10040','青柳 森勝','1997-10-16',1,'岐阜県大垣市','2020-04-01',1,8,1);

INSERT INTO Worker 
VALUES('10041','田代 春実','1995-07-24',2,'奈良県大和郡山市','2020-04-01',2,3,3);

INSERT INTO Worker 
VALUES('10042','菅野 兼一','2001-02-06',1,'東京都台東区','2020-04-01',2,5,4);

INSERT INTO Worker 
VALUES('10043','関根 和茂','1998-02-13',1,'北海道河東郡音更町','2020-06-01',3,4,4);

INSERT INTO Worker 
VALUES('10044','三上 智治','2000-04-28',1,'京都府京都市','2020-07-01',4,1,5);

INSERT INTO Worker 
VALUES('10045','福永 梨絵','1996-06-09',2,'愛知県岡崎市','2020-12-01',5,3,4);

COMMIT;
列名の省略
INSERT INTO Worker
VALUES('10040','青柳 森勝','1997-10-16',1,'岐阜県大垣市','2020-04-01',1,8,1);

列名を省略したINSERT文では、実際のRDBMS内のテーブルの列の並びに基づき、データを登録することができます。

実例_MySQLのINSERT INTO

実際のRDBMS、MySQLでINSERT INTO文を実行してテーブルにデータを登録した実画像を紹介します。

INSERT INTOの実行

MySQLのINSERT INTO実行画面

以上で、MySQLのテーブルにデータを登録できました。

SELECT文で確認(参照)

前節で登録したデータを確認してみます。(INSERT INTO実行後)

SELECT * FROM Worker;

実例_PostgreSQLのINSERT INTO

実際のRDBMS、PostgreSQLでINSERT INTO文を実行してテーブルにデータを登録した実画像を紹介します。

INSERT INTOの実行

PostgreSQLのINSERT INTO実行画面

以上で、PostgreSQLのテーブルにデータを登録できました。

SELECT文で確認(参照)

SELECT * FROM Worker;

あとがき

今回は、RDBMSのテーブルへINSERTを使ってデータを登録するSQL文について、記事にしました。

これまで当サイトでは、データベースの作成やテーブルの作成についても記事を投稿していますので、何か分からないことがあれば、ぜひ関連記事もご参照ください。

目次