今回は、SQLのINSERT文を使ってテーブルにデータを登録する方法を説明します。
INSERT文は、SQLの操作の中でも使用頻度の高い命令文です。
この記事では、INSERT文で登録する元データのExcelの画像と併せて、実際にMySQLとPostgreSQLにデータ登録する実画像を用いて説明します。
登録するデータをExcelで可視化してご覧いただくことで、ご理解しやすくなります。
SQL_データの登録(INSERET文)
この記事で説明するINSERT文を使ったデータの登録は、以前の記事で作成したテーブルを使います。参考までに紹介しておきます。
テーブルの元データのExcel
テーブルに登録する元データは下記のExcelの赤枠の部分です。この計6レコード(9列)分のデータをRDBMSに登録するSQL文を紹介します。
RDBMSのテーブル
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制約が設定されている列が存在していれば、エラーが発生します。
列名を省略する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のテーブルにデータを登録できました。
SELECT文で確認(参照)
前節で登録したデータを確認してみます。(INSERT INTO実行後)
実例_PostgreSQLのINSERT INTO
実際のRDBMS、PostgreSQLでINSERT INTO文を実行してテーブルにデータを登録した実画像を紹介します。
INSERT INTOの実行
以上で、PostgreSQLのテーブルにデータを登録できました。
SELECT文で確認(参照)
あとがき
今回は、RDBMSのテーブルへINSERTを使ってデータを登録するSQL文について、記事にしました。
これまで当サイトでは、データベースの作成やテーブルの作成についても記事を投稿していますので、何か分からないことがあれば、ぜひ関連記事もご参照ください。