PR

【SQL】INSERT文を1分でわかりやすく解説

Database

テーブルにデータを登録する場合に利用するINSERT文について初心者向けにわかりやすく1分で解説します。

前提となる知識は一切必要ありません。このページ内を読めば自分ひとりでテーブルへのレコード登録が可能になるようサンプルコード付きでご説明します。

このページで学べる内容
  • INSERT文の使い方/構文ルール
    • 列リストの省略
    • NULL値のレコード登録
  • INSERT文利用時の注意点

プログラマーやデータベースエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識。是非最後までご覧ください。

スポンサーリンク

SQL:INSERT文

INSERT文はテーブルにレコードを登録する場合に利用します。

INSERT INTO テーブル名 (列1,列2,列3,・・・) VALUES (値1,値2,値3,・・・);

INSERT文のポイントは以下の3つ。

INSERT文のポイント
  • INSERT INTO に続けて「テーブル名」を指定
  • テーブル名に続けて「レコードを登録する列」を指定
  • VALUE句に続けて「登録したい値」を指定

以下のようなテーブルを例にINSERT文を利用してレコード登録処理を見ていきます。

SQL INSERT
サンプルテーブル

テーブル定義の詳細は以下の通り。参考:CREATE TABLE文

CREATE TABLE PointList (
ID       INT(3)       NOT NULL PRIMARY KEY,
Name     VARCHAR(50)  NOT NULL,
Class    VARCHAR(1),
Japanese INT(3)       DEFAULT '0',
Math     INT(3)       DEFAULT '0', 
English  INT(3)       DEFAULT '0'
);

/*
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| ID       | int(3)      | NO   | PRI | NULL    |       |
| Name     | varchar(50) | NO   |     | NULL    |       |
| Class    | varchar(1)  | YES  |     | NULL    |       |
| Japanese | int(3)      | YES  |     | 0       |       |
| Math     | int(3)      | YES  |     | 0       |       |
| English  | int(3)      | YES  |     | 0       |       |
+----------+-------------+------+-----+---------+-------+
*/
INSERT INTO PointList (ID,Name,Class,Japanese,Math,English) VALUES (1,'佐藤','A',100,100,85);

以上のSQLを実行した結果がこちらです。PointListというテーブルに以下のようなレコードが新規に登録されていることが分かります。

INSERT INTO PointList (ID,Name,Class,Japanese,Math,English) VALUES (1,'佐藤','A',100,100,85);

/*
+----+------+-------+----------+------+---------+
| ID | Name | Class | Japanese | Math | English |
+----+------+-------+----------+------+---------+
|  1 | 佐藤 | A     |      100 |  100 |      85 |
+----+------+-------+----------+------+---------+
*/

続けてもう1つ別のレコードを登録してみます。

INSERT INTO PointList (ID,Name,Class,Japanese,Math,English) VALUES (2,'鈴木','A',90,70,70);


/*
+----+------+-------+----------+------+---------+
| ID | Name | Class | Japanese | Math | English |
+----+------+-------+----------+------+---------+
|  1 | 佐藤 | A     |      100 |  100 |      85 |
|  2 | 鈴木 | A     |       90 |   70 |      70 |←2レコード目が登録される
+----+------+-------+----------+------+---------+
*/

構文自体は難しさはありません。

ただし、例えばVARCHAR型(文字型)のカラムにデータを登録する場合には「'鈴木'」「'A'」というようにシングルコーテーションを付与してあげる必要があるなど細かい部分で注意が必要です。

参考 データ型の基本

また、1回のINSERT文では1行のレコードのみが登録されるという点もポイントの1つとして押さえておきましょう。

SQL:INSERT文で複数行のレコードを登録する

INSERT文は1回の実行で1行のレコードのみが登録されますが、一度に複数行を登録したいような場面も発生します。

その場合には、VALUE句に続けて以下のように値リストをカンマで区切って記載します。

INSERT INTO PointList (ID,Name,Class,Japanese,Math,English)
  VALUES (3,'高橋','A',85,70,65),
         (4,'中村','A',90,65,85),
         (5,'小林','B',70,90,65);

/*
+----+------+-------+----------+------+---------+
| ID | Name | Class | Japanese | Math | English |
+----+------+-------+----------+------+---------+
|  1 | 佐藤 | A     |      100 |  100 |      85 |
|  2 | 鈴木 | A     |       90 |   70 |      70 |
|  3 | 高橋 | A     |       85 |   70 |      65 |←追加されたレコード
|  4 | 中村 | A     |       90 |   65 |      85 |←追加されたレコード
|  5 | 小林 | B     |       70 |   90 |      65 |←追加されたレコード
+----+------+-------+----------+------+---------+
*/

ただし、実はINSERT文で複数行のレコードを登録するのは積極的にはオススメできません。

複数行INSERTがオススメできない理由
  • ①:エラー発生時に「どのレコードでエラーが起きたか?」が分かりづらい
  • ②:まれに複数行INSERTが許可されていないDBMSが存在する

上記の理由から、INSERT文で一気に複数行のレコードを挿入するエンジニアは実は多くありません。

以下のように1行1行個別にSQL文を発行するのがおすすめです。

INSERT INTO PointList (ID,Name,Class,Japanese,Math,English) VALUES (1,'佐藤','A',100,100,85);
INSERT INTO PointList (ID,Name,Class,Japanese,Math,English) VALUES (2,'鈴木','A',90,70,70);
INSERT INTO PointList (ID,Name,Class,Japanese,Math,English) VALUES (3,'高橋','A',85,70,65);
INSERT INTO PointList (ID,Name,Class,Japanese,Math,English) VALUES (4,'中村','A',90,65,85);
INSERT INTO PointList (ID,Name,Class,Japanese,Math,English) VALUES (5,'小林','B',70,90,65);

INSERT文:列リストの省略

冒頭ではINSERT文の構文ルールを以下の通りで説明しました。

INSERT INTO テーブル名 (列1,列2,列3,・・・) VALUES (値1,値2,値3,・・・);

"INSERT INTO テーブル名 (列1,列2,列3,・・・)~" のようにレコードを登録したい列を明示しています。

ただし、テーブルに存在するすべての列にレコードを登録したい場合だけは、この列リストの記述を省略することができます。

INSERT INTO PointList VALUES (7,'田中','B',70,90,65);

/*
+----+------+-------+----------+------+---------+
| ID | Name | Class | Japanese | Math | English |
+----+------+-------+----------+------+---------+
|  1 | 佐藤 | A     |      100 |  100 |      85 |
|  2 | 鈴木 | A     |       90 |   70 |      70 |
|  3 | 高橋 | A     |       85 |   70 |      65 |
|  4 | 中村 | A     |       90 |   65 |      85 |
|  5 | 小林 | B     |       70 |   90 |      65 |
|  6 | 山口 | B     |       90 |   85 |      85 |
|  7 | 田中 | B     |       70 |   90 |      65 |←列リスト省略してINSERTした結果
+----+------+-------+----------+------+---------+
*/

INSERT文:NULLを登録する場合

最後にNULL値のレコードを登録したい場合について解説します。

ただし、とはいっても構文ルール自体は変わりません。VALUES句に明示的にNULL値を指定すればOKです。

INSERT INTO PointList (ID,Name,Class,Japanese,Math,English) VALUES (8,'伊藤','B',70,90,NULL);

/*
+----+------+-------+----------+------+---------+
| ID | Name | Class | Japanese | Math | English |
+----+------+-------+----------+------+---------+
|  1 | 佐藤 | A     |      100 |  100 |      85 |
|  2 | 鈴木 | A     |       90 |   70 |      70 |
|  3 | 高橋 | A     |       85 |   70 |      65 |
|  4 | 中村 | A     |       90 |   65 |      85 |
|  5 | 小林 | B     |       70 |   90 |      65 |
|  6 | 山口 | B     |       90 |   85 |      85 |
|  7 | 田中 | B     |       70 |   90 |      65 |
|  8 | 伊藤 | B     |       70 |   90 |    NULL |←English列がNULLで登録されている
+----+------+-------+----------+------+---------+
*/

以上でSQLのINSERT文についての基本は以上です。

INSERT文のまとめ
  • INSERT文はテーブルにレコードを登録する場合に利用する
  • INSERT文のポイント
    • INSERTに続けて「テーブル名」を指定
    • テーブル名に続けて「レコードを登録する列」を指定
    • VALUE句に続けて「登録したい値」を指定
  • テーブルに存在するすべての列にレコードを登録したい場合だけは列リストの記述を省略すること可能
INSERT INTO PointList (ID,Name,Class,Japanese,Math,English) VALUES (1,'佐藤','A',100,100,85);

/*
+----+------+-------+----------+------+---------+
| ID | Name | Class | Japanese | Math | English |
+----+------+-------+----------+------+---------+
|  1 | 佐藤 | A     |      100 |  100 |      85 |
+----+------+-------+----------+------+---------+
*/

SQLを1から学習したい方は

SQLやデータベースの仕組みを1から学習したい方(学び直したい方)向けに、現役エンジニア達のスキルを結集して 完全無料 のSQL教材を作成しました。

SQLは決して難しい技術ではないので、エンジニアであれば「当たり前のように」扱えて当然かも・・・?

とはいえ、案外SQLをちゃんと使ったことがない人も多いはずです。この機会に是非一度ご覧になってみてください。

システムエンジニアを目指したい方は

システムエンジニアを目指す方や、IT知識を1から身につけたい方は以下のページをご覧ください。

正直どこから学び始めればよいかわからない。どのように勉強していけば、エンジニアとしてのスキルが磨けるか?が分からない・・・という方は必見です。

システムエンジニア向けに「できるエンジニア」になる方法を1から解説しておりますので、是非ご覧ください。

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
DatabaseIT-Skills
シェアする
ビズドットオンラインをフォローする
タイトルとURLをコピーしました