RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

【SQL入門】INSERT まとめ

技術広報の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します。

  • 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文を学ぶ方にとって、少しでもお役たてれば幸いです。
最後までお読みいただきありがとうございました!


◆TECH PLAY
techplay.jp

◆connpass
rakus.connpass.com

Copyright © RAKUS Co., Ltd. All rights reserved.