技術広報の yayawowo です。 皆様、 SQL を日頃お使いでしょうか? 今回は、 「データを追加」する際に欠かせないINSERT文の使い方と、おすすめの書籍をご紹介 します。 INSERT文の使い方を習得いただくため、お手元で実行可能な SQL 文付きで解説します。 是非、実践しながら習得ください! ※本説明では、 PostgreSQL 9.6を利用します。 テーブルの準備 INSERT文をマスターしよう 基本的な使い方 複数レコードを同時INSERT 別テーブルにINSERT おすすめの書籍 INSERT まとめ ◆ 【 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します。 skill _no が1の場合:走る skill _no が2の場合:飛ぶ ◆ 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 パフォーマンス詳解 ◆ 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