技術広報のyayawowoです。
皆様、SQLを日頃お使いでしょうか?
今回は、「データを追加」する際に欠かせないINSERT文の使い方と、おすすめの書籍をご紹介します。
INSERT文の使い方を習得いただくため、お手元で実行可能なSQL文付きで解説します。
是非、実践しながら習得ください!
※本説明では、PostgreSQL 9.6を利用します。
◆ 【SQL入門】PostgreSQL 関連記事
・【SQL入門】UPDATE まとめ
・【SQL入門】DISTINCT 使い方
・RDBMSとDBMSについて【初心者向け】
・SQLの基本【まとめ】
・【RDBMS】PostgreSQLインストール・コマンド入門編
テーブルの準備
まず、INSERT文の解説に入る前に今回使うテーブルを作成します。
テーブルの列定義とCREATE文は以下の通りです。
◆ 列定義
列名 | データ型 | PK |
---|---|---|
animal_no | integer | ○ |
animal_name | text | |
animal_breed | text | |
skill_no | integer | |
skill_name | text |
◆ SQL文
--テーブル作成SQL文 CREATE TABLE sample_animal ( animal_no integer primary key, animal_name text, animal_breed text, animal_sex text, skill_no integer, skill_name text );
では、テーブルが完成しましたのでINSERT文の説明に入ります。
INSERT文をマスターしよう
基本的な使い方
INSERT文の基本的な使い方として、テーブルにデータを登録する方法をご説明します。
まず初めに、列名を指定するパターンです。
< 書式:列名指定有パターン >
INSERT INTO テーブル名 (列名1, 列名2,....) VALUES (値1, 値2, ...) ;
テーブル名:データを登録したいテーブル名を記載する
列名:値を追加したい列名を記載する
値 :追加したい値を記載する
では、INSERT文を書いてみましょう!
◆SQL文
--SQL文:INSERTの基本(列名指定有) INSERT INTO sample_animal (animal_no, animal_name, animal_breed, animal_sex, skill_no, skill_name) VALUES (1, '犬', '柴犬', '女', 1, null); INSERT INTO sample_animal (animal_no, animal_name, animal_breed, animal_sex, skill_no, skill_name) VALUES (2, '犬', '柴犬', '男', 2, null); INSERT INTO sample_animal (animal_no, animal_name, animal_breed, animal_sex, skill_no, skill_name) VALUES (3, '犬', 'チワワ', '男', 1, null);
◆実行結果
animal_no | animal_name | animal_breed | animal_sex | skill_no | skill_name |
---|---|---|---|---|---|
1 | 犬 | 柴犬 | 女 | 1 | (null) |
2 | 犬 | 柴犬 | 男 | 2 | (null) |
3 | 犬 | チワワ | 男 | 1 | (null) |
なお、上記SQL文では列名一つ一つ指定しましたが、省略することもできます。
列名指定をしない場合のINSERT文は、以下の通りです。
< 書式:列名指定無パターン >
INSERT INTO テーブル名 VALUES (値1, 値2, ...) ;
※注意点
列名指定をしない場合の「値」は、列名順通りに正しく指定するよう、注意ください!
◆SQL文
--SQL文:INSERTの基本(列名指定無) INSERT INTO sample_animal VALUES (1, '犬', '柴犬', '女', 1, null); INSERT INTO sample_animal VALUES (2, '犬', '柴犬', '男', 2, null); INSERT INTO sample_animal VALUES (3, '犬', 'チワワ', '男', 1, null);
実行結果は列名を指定した結果と変わりません。
列名を指定しない場合はとてもシンプル且つ、便利に見えますが、想定していないトラブルが発生するリスクもあります。
列名指定をしないINSERT文を使う際は、ご注意いただきながらご利用ください。
複数レコードを同時INSERT
続いて、複数レコードを1つのINSERT文を使い同時に追加する場合を説明します。
前述したINSERTの基本をご理解いただけていれば、とても簡単な方法です。
< 書式 >
INSERT INTO テーブル名 VALUES (値1-1, 値1-2, 値1-3), (値2-1, 値2-2, 値3-3) ... ;
では、実際に値を入れてみてみましょう。
◆ SQL文
--SQL文:複数レコード同時INSERT INSERT INTO sample_animal VALUES (1, '犬', '柴犬', '女', 1, null), (2, '犬', '柴犬', '男', 2, null), (3, '犬', 'チワワ', '男', 1, null);
◆実行結果
animal_no | animal_name | animal_breed | animal_sex | skill_no | skill_name |
---|---|---|---|---|---|
1 | 犬 | 柴犬 | 女 | 1 | (null) |
2 | 犬 | 柴犬 | 男 | 2 | (null) |
3 | 犬 | チワワ | 男 | 1 | (null) |
VALUESの後に同時INSERTしたい値を指定しているのが、お分かりいただけるのではないでしょうか?
INSERT文を1つずつ書くよりも効率的ですね。
別テーブルにINSERT
別テーブルに問い合わせる処理である「副問合せ(サブクエリ)」を使った、INSERT文についてご説明します。
今回利用するテーブルの準備を先にしましょう。
初めに今回SELECT文で呼び出す、sample_animalテーブルのデータを以下の内容でUPDATEします。
◆SQL文
--SQL文:sample_animalテーブルをUPDATE UPDATE sample_animal SET skill_name = '走る' WHERE skill_no = 1; UPDATE sample_animal SET skill_name = '飛ぶ' WHERE skill_no = 2;
◆実行結果
animal_no | animal_name | animal_breed | animal_sex | skill_no | skill_name |
---|---|---|---|---|---|
1 | 犬 | 柴犬 | 女 | 1 | 走る |
2 | 犬 | 柴犬 | 男 | 2 | 飛ぶ |
3 | 犬 | チワワ | 男 | 1 | 走る |
実行結果のようになりましたか?
では、次に今回SELECTで呼び出した値を書き出す、sample_skill テーブルをCREATEしてみましょう。
◆ 列定義
列名 | データ型 | PK |
---|---|---|
skill_no | integer | ○ |
skill_name | text |
◆SQL文
--テーブル作成SQL文 CREATE TABLE sample_skill ( skill_no integer primary key, skill_name text );
ここまで来ましたら準備完了です。
では、sample_animalテーブルからSELECTで呼び出した値を別テーブルである、sample_skill テーブルにINSERTしてみます。
利用する書式は以下の通りです。
< 書式 >
INSERT INTO テーブル名1 (列名1, 列名2, .... )
SELECT テーブル名2.列名 FROM テーブル名2 WHERE 条件;
SQL文をたたいてみましょう!
◆SQL文
--SQL文:別テーブルにINSERT INSERT INTO sample_skill SELECT sample_animal.skill_no, sample_animal.skill_name FROM sample_animal WHERE animal_no IN (1, 2);
◆実行結果
animal_no | animal_name | animal_breed | animal_sex | skill_no | skill_name |
---|---|---|---|---|---|
1 | 犬 | 柴犬 | 女 | 1 | 走る |
2 | 犬 | 柴犬 | 男 | 2 | 飛ぶ |
3 | 犬 | チワワ | 男 | 1 | 走る |
skill_no | skill_name |
---|---|
👇
skill_no | skill_name |
---|---|
1 | 走る |
2 | 飛ぶ |
上記実行結果の通り、スキルだけを抽出することができました。
INSERT文の使い方の説明は以上となります。
もし、INSERT文だけでなく、CREATE文/ SELECT文/UPDATE文を何も見ずに書ける人は、次ステップであるSQLでのパフォーマンスチューニングに挑戦するのもおすすめです!
おすすめの書籍
これからSQLを学びたい方に、おすすめの3冊はこちら!
◆ スッキリわかるSQL入門 第2版
◆ イラストで理解 SQL はじめて入門
◆ SQL 第2版 ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)
DB設計やパフォーマンスチューニングを学びたい方に、おすすめの4冊はこちら!
◆ SQL実践入門──高速でわかりやすいクエリの書き方
◆ SQLパフォーマンス詳解
◆ 達人に学ぶDB設計 徹底指南書
INSERT まとめ
いかがでしたでしょうか?
今回は、SQL入門としまして『INSERT まとめ』をご紹介させていただきました。
実際にお手元でSQLを動かすことで、より理解を深めることができたのではないでしょうか。
改めまして、本記事がINSERT文を学ぶ方にとって、少しでもお役たてれば幸いです。
最後までお読みいただきありがとうございました!
エンジニア中途採用サイト
ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
ご興味ありましたら是非ご確認をお願いします。
https://career-recruit.rakus.co.jp/career_engineer/カジュアル面談お申込みフォーム
どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
以下フォームよりお申込みください。
rakus.hubspotpagebuilder.comラクスDevelopers登録フォーム
https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/イベント情報
会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください!
◆TECH PLAY
techplay.jp
◆connpass
rakus.connpass.com