(最終更新月:2022年12月)
✔このような方へ向けて書かれた記事となります
「SQLのINSERT文について勉強したい」
「SQLのINSERT文の実例が見てみたい」
「INSERT文ではどんなことができるのだろうか」
✔当記事を通じてお伝えすること
- INSERT文の基本
- INSERT文を応用してできること
- INSERT文を扱うための注意事項
当記事では、SQL言語におけるINSERT文の基本はもちろん、その応用した書き方や注意事項、無料で使えるツールまですべて網羅して解説しています。
ぜひ最後までご覧ください。
✔当記事の信頼性
当記事では、Python言語をベースとしたDjangoフレームワークで、アプリの公開方法をご紹介しています。
データの保存場所は、サーバー内で動くpostgreSQL(ポスグレ)です。
Djangoを使えばSQLをマスターしておく必要はないものの、最低限の知識として、かなり勉強しました。
実際のコードや写真付きで、できる限り丁寧に解説します。
※Djangoのチュートリアルはこちら。
SQL言語:INSERT文の基本
こちらでは、INSERT文の基本について解説していきます。
まずは基本的な使い方をマスターしていきましょう。
- INSERT文の基本構成
- INSER文で複数行のレコードを登録する
- INSER文の実例
INSERT文の基本構成
INSERT文の構成は以下のとおりです。
INSERT INTO テーブル名 (カラム名1, カラム名2) VALUES (値1, 値2);
INSERT INTO ITC_TABLE (title, text) VALUES ('タイトル','テキスト');
INSERT文で複数行のレコードを登録する
複数行を一括で登録するには、VALUES以降を複数にします。
INSERT INTO テーブル名 (カラム名1, カラム名2) VALUES (値1-1, 値1-2), (値2-1, 値2-2), (値3-1, 値3-2),…;
INSERT INTO ITC_TABLE (title, text) VALUES ('タイトル1','テキスト1'), ('タイトル2','テキスト2');
INSERT文の実例
INSERT文の実例をご覧いただくために、以下のテーブルを使っていきます。
CREATE TABLE itc_table(
title varchar(40),
text varchar(255)
);
2行分のレコードを追加します。
INSERT INTO itc_table (title, text) VALUES ('タイトル1', 'テキスト1です。'),('タイトル2', '2つ目のテキストです。');
SQL言語:INSERT文の応用
INSERTを応用して何ができるのかをご紹介していきます。
より詳しく知れば、複雑に思える作業もINSERTを使って簡単にできるのです。
- CASE…WHENを使う
- 副問合せ:別テーブルから取得する
- CONCATを使う
CASE…WHENを使う
CASE…WHENを使うと、条件により動的な値を代入できるようになります。
以下のとおりです。
INSERT INTO テーブル名 (カラム名) VALUES (CASE 値 WHEN 条件 THEN 値 WHEN 条件2 THEN 値2 END);
具体的には以下のとおりです。
INSERT INTO itc_table (title,text) VALUES (
'時間別テキスト',
CASE EXTRACT(HOUR FROM now())
WHEN 1 THEN '1時に入力されました。'
WHEN 5 THEN '5時に入力されました。'
ELSE '1時と5時に入力されたものではありません'
END
);
SELECT * FROM itc_table;
現在はUTCで5時なので、結果は以下のとおり。
副問合せ:別テーブルから取得する
別テーブルから値をINSERTできます。
INSERT INTO テーブル名 (カラム名) VALUES (SELECT カラム名 FROM テーブル名 WHERE 条件);
具体的に以下のテーブルから値を挿入してみます。
id | title2 | text2 |
---|---|---|
1 | テーブル2のタイトル① | テーブル2のテキスト① |
2 | テーブル2のタイトル② | テーブル2のテキスト② |
id「1」の値をitc_tableへINSERTします。
INSERT INTO itc_table (title, text) VALUES ('別テーブルからのテキスト',
(SELECT text2 FROM itc_table2 WHERE id2=1)
);
結果は以下のとおりです。
CONCATを使う
CONCATを使って、値を合算したものを登録できます。
INSERT INTO テーブル名 (カラム名) VALUES (SELECT CONCAT(カラム名1, カラム名2) FROM テーブル名 WHERE 条件);
別テーブル「itc_table2」のタイトルとテキストを合算して、テキストとして保存しましょう。
INSERT INTO itc_table (title, text) VALUES ('別テーブルからのテキスト',
(SELECT text2 FROM itc_table2 WHERE id2=1)
);
こちらがその結果です。
INSERT文を使う際の注意事項3選
こちらでは、SQL言語でINSERT文を書く際の注意点を共有します。
コードをたくさん書けば書くほど、不具合が出たときの修正が大変だからです。
- 複数行のレコードを一括で登録する
- クエリが取得できるかを確認する
- カラム名はできるだけ記述する
複数行のレコードを一括で登録する
複数行のレコードを一括で登録する際には注意が必要です。
なぜならエラーが発生した際に、どの部分がうまくいっていないのかが特定しにくくなるから。
できる限り、コードを分割して、エラー箇所が発覚しやすいようにしましょう。
クエリが取得できるかを確認する
副問合せを使うときは、クエリが取得できているかを確認しましょう。
クエリが取得できていなければ、nullなど予期しない値が保存されてしまうからです。
クエリとは、以下のような文章で返ってくるレコードのこと。
SELECT * FROM itc_table;
クエリが取得できていないとエラーの原因となってしまうので気をつけましょう。
カラム名はできるだけ記述する
各テーブルの列名が同じであれb,カラム名を記載する必要はありません。
ただし、列名はできるだけ記述することをおすすめします。
その理由は、テーブルに変更を加えてしまうとカラム名や順番がずれてしまう可能性があるから。
最初は面倒でも、カラム名を記述しておけば、テーブルに変更があってもエラーは起こらないのです。
SQL Fiddle:SQLが無料で書けて、実行できる
当記事で共有している写真も、SQL Fiddleを使ってご説明しました。
特徴は以下のとおり。
- SQL言語がブラウザ打てて、実行できる
- 完全無料
- 登録不要
以下のように、左側でテーブルやカラムの設定をおこない、右側でコードが実行できるのです。
SQL言語を学ぶなら、登録してくことをおすすめします!
ちなみに今回のデータベース設定として、SQL Fiddleの左側に書いたコードはこちら。
CREATE TABLE itc_table(
title varchar(40),
text varchar(255)
);
CREATE TABLE itc_table2(
title2 varchar(40),
text2 varchar(255)
);
コピーして活用してください。
まとめ:SQLのINSERT文は、基本的な構成を覚えれば簡単
当記事の内容をまとめます。
- SQL言語のINSERT文の基本形をマスターしよう
- INSERT文を応用すれば、別テーブルからの値も取得できる
- INSERT文を使う際には、できるだけ細かくコードを書くことがおすすめ
SQLのINSERT文は、レコードを登録するために必須のコマンド。
いろいろなやり方を覚えれば、コーディングのスピードアップにも繋がります。
当記事でマスターしておきましょう。