テーブルにデータを登録する場合に利用するINSERT文について初心者向けにわかりやすく1分で解説します。
前提となる知識は一切必要ありません。このページ内を読めば自分ひとりでテーブルへのレコード登録が可能になるようサンプルコード付きでご説明します。
プログラマーやデータベースエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識。是非最後までご覧ください。
SQL文の基本ルール(大文字/小文字の区別、コメントの付与など)を始めに学んでおきたい方は以下の記事を先にご覧ください。
SQL:INSERT文
INSERT文はテーブルにレコードを登録する場合に利用します。
INSERT INTO テーブル名 (列1,列2,列3,・・・) VALUES (値1,値2,値3,・・・);
INSERT文のポイントは以下の3つ。
以下のようなテーブルを例に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文で一気に複数行のレコードを挿入するエンジニアは実は多くありません。
以下のように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文についての基本は以上です。
SQLを1から学習したい方は
SQLやデータベースの仕組みを1から学習したい方(学び直したい方)向けに、現役エンジニア達のスキルを結集して 完全無料 のSQL教材を作成しました。
SQLは決して難しい技術ではないので、エンジニアであれば「当たり前のように」扱えて当然かも・・・?
とはいえ、案外SQLをちゃんと使ったことがない人も多いはずです。この機会に是非一度ご覧になってみてください。
システムエンジニアを目指したい方は
システムエンジニアを目指す方や、IT知識を1から身につけたい方は以下のページをご覧ください。
正直どこから学び始めればよいかわからない。どのように勉強していけば、エンジニアとしてのスキルが磨けるか?が分からない・・・という方は必見です。
システムエンジニア向けに「できるエンジニア」になる方法を1から解説しておりますので、是非ご覧ください。