SQL入門 STEP6|INSERTでデータを追加しよう

karin@taishi@felmia

テーブルに新しいデータを追加しよう

ここまでのSTEPでは、productsテーブルに入っている商品をSELECTで取得したり、WHEREで絞り込んだりしてきました。

現在は、次の5件の商品が登録されています。

product_id | product_name | price
-----------+--------------+-------
1          | ノートPC      | 120000
2          | マウス        | 3000
3          | キーボード     | 8000
4          | モニター       | 30000
5          | USBメモリ      | 2000

これまでは、このデータを「取得する」操作が中心でした。

今回は、新しい商品を自分で追加してみましょう。

データを追加するときに使うのがINSERTです。

INSERTとは?

テーブルに新しいデータを追加するときに使うSQLです。

例えば商品テーブルなら、

「新しい商品を1件追加する」

といった操作ができます。

ルミィ
ルミィ

今まではデータを見る側だったけど、今度は自分で新しいデータを登録するんだね♪

商品を1件追加してみよう

まずは、productsテーブルに「Webカメラ」を追加してみます。

Query Toolで次のSQLを実行してください。

INSERT INTO products (product_id, product_name, price)
VALUES (6, 'Webカメラ', 6000);

これで、productsテーブルに新しい商品が1件追加されます。

ただ、INSERTを実行しただけでは、本当に追加されたのか少し分かりにくいですね。

STEP3で学んだSELECTを使って確認してみましょう。

SELECT * FROM products
ORDER BY product_id ASC;

実行結果に、

6 | Webカメラ | 6000

が追加されていれば成功です。

ルミィ
ルミィ

前に覚えたSELECTがここでも使えるね!
追加した後に確認するところまでやっておこう♪

INSERTの書き方を確認しよう

先ほど実行したSQLを、もう一度見てみましょう。

INSERT INTO products (product_id, product_name, price)
VALUES (6, 'Webカメラ', 6000);

基本的な形は次のようになります。

INSERT INTO テーブル名 (カラム名1, カラム名2, カラム名3)
VALUES (値1, 値2, 値3);

それぞれの部分を分けて見ていきます。

まず、

INSERT INTO products

では、どのテーブルにデータを追加するのかを指定しています。

今回はproductsテーブルですね。

続いて、

(product_id, product_name, price)

で、データを追加するカラムを指定しています。

最後に、

VALUES (6, 'Webカメラ', 6000)

で、それぞれのカラムに登録する値を指定します。

カラムと値の順番を合わせよう

INSERTを書くときに大切なのが、カラムと値の順番です。

今回のSQLでは、

(product_id, product_name, price)

に対して、

(6, 'Webカメラ', 6000)

を指定しています。

対応させると、

product_id   → 6
product_name → 'Webカメラ'
price        → 6000

となります。

左から同じ順番で対応しているのがポイントです。

INSERTでは順番に注意

(product_id, product_name, price)
VALUES (6, 'Webカメラ', 6000);

カラムと値は左から順番に対応します。

どのカラムに、どの値を登録するのかを確認してから実行しましょう。

文字はシングルクォーテーションで囲む

WHEREでも登場しましたが、INSERTでも文字を指定するときは'で囲みます。

今回なら、

'Webカメラ'

の部分です。

一方、商品IDや価格は整数なので、

6
6000

のようにそのまま書いています。

VALUES (6, 'Webカメラ', 6000);

product_nameだけ書き方が違うことを確認しておきましょう。

複数の商品をまとめて追加してみよう

INSERTでは、1件ずつではなく複数のデータをまとめて追加することもできます。

今回は次の3商品を追加してみましょう。

| 商品ID | 商品名      |   価格 |
|    7 | ヘッドセット   | 7000 |
|    8 | HDMIケーブル | 1500 |
|    9 | PCスタンド   | 4500 |

次のSQLを実行します。

INSERT INTO products (product_id, product_name, price)
VALUES
    (7, 'ヘッドセット', 7000),
    (8, 'HDMIケーブル', 1500),
    (9, 'PCスタンド', 4500);

複数件追加するときは、それぞれのデータを,で区切ります。

最後のデータには,を付けず、;でSQLを終了します。

追加できたら、SELECTで確認してみましょう。

SELECT * FROM products
ORDER BY product_id ASC;

商品IDが1~9まで表示されればOKです。

カラムの指定は省略できる?

INSERTには、次のような書き方もあります。

INSERT INTO products
VALUES (10, 'スピーカー', 5000);

カラム名を書いていませんが、テーブルに定義されているカラムの順番と値が一致していれば登録できます。

ただし、この書き方はテーブルの構造を知らないと、

どの値がどのカラムに入るのか分かりにくい

という問題があります。

そのため、この講座では、

INSERT INTO products (product_id, product_name, price)
VALUES (10, 'スピーカー', 5000);

のように、カラム名を指定する書き方を基本にします。

SQLを後から読み返したときにも、こちらの方が内容を把握しやすくなります。

PRIMARY KEYの重複を試してみよう

STEP2では、product_idにPRIMARY KEYを設定しました。

PRIMARY KEYには、同じ値を重複して登録できません。

現在、商品ID1にはノートPCが登録されています。

そこで、次のSQLを実行してみます。

INSERT INTO products (product_id, product_name, price)
VALUES (1, 'プリンター', 15000);

すると、エラーが表示されます。

商品ID1はすでに使われているため、新しい商品にも同じ1を使うことはできません。

PRIMARY KEYは重複できない

product_idはPRIMARY KEYに設定しています。

そのため、

商品ID 1
商品ID 1

のように、同じIDを持つ商品を複数登録することはできません。

商品ごとに異なるIDを指定する必要があります。

このエラーはSQLの書き方そのものが間違っているわけではありません。

テーブルに設定されたルールに反しているため登録できないというエラーです。

エラーが出たときは、SQLのスペルだけでなく、登録しようとしている値にも目を向けてみましょう。

追加したデータをWHEREで確認してみよう

ここまでで、STEP3~5で学んだSQLもかなり使えるようになっています。

せっかくなので、今回追加した商品だけを取得してみましょう。

商品ID6以降が今回追加したデータです。

SELECT * FROM products
WHERE product_id >= 6
ORDER BY product_id ASC;

これなら、

  • SELECTでデータを取得
  • WHEREで対象を絞り込み
  • ORDER BYで並び替え

という3つの操作を組み合わせています。

新しいSQLを覚えるたびに、それまで覚えたSQLが使えなくなるわけではありません。

少しずつ組み合わせられることが増えていくのがSQLの面白いところです。

ルミィ
ルミィ

SELECT、WHERE、ORDER BYもちゃんとつながってる!
できることが少しずつ増えてきたね♪

よくある間違い

カラムと値の数が合っていない

例えば、

INSERT INTO products (product_id, product_name, price)
VALUES (10, 'スピーカー');

では、カラムを3つ指定しているのに値が2つしかありません。

カラムを3つ指定した場合は、それに対応する値も3つ必要です。

カラムと値の順番が合っていない

INSERT INTO products (product_id, product_name, price)
VALUES ('スピーカー', 10, 5000);

これではproduct_idに「スピーカー」を登録しようとしてしまいます。

カラム名と値が、左から正しく対応しているか確認しましょう。

文字をシングルクォーテーションで囲んでいない

商品名のような文字は、

'スピーカー'

のように'で囲みます。

特にJavaなど他の言語に慣れていると、"を書きたくなることがあります。

PostgreSQLで文字列の値を書くときは、基本的にシングルクォーテーションを使います。

同じSQLをもう一度実行してしまう

一度登録したINSERTを、間違えてもう一度実行することもあります。

今回のproduct_idはPRIMARY KEYなので、同じIDを使ったINSERTを再実行するとエラーになります。

エラーが出たら、

「この商品IDはすでに登録していないか?」

も確認してみましょう。

STEP6のまとめ

STEP6のポイント

  • INSERTを使うと新しいデータを追加できる
  • INSERT INTOで追加先のテーブルとカラムを指定する
  • VALUESで登録する値を指定する
  • カラムと値は左から順番に対応する
  • 文字は'で囲む
  • 複数のデータをまとめて追加することもできる
  • PRIMARY KEYには同じ値を重複して登録できない

今回はINSERTを使って、productsテーブルに新しい商品を追加しました。

データを追加した後にSELECTを実行して、

「本当に意図したデータが入っているか」

まで確認する習慣を付けておくと安心です。

これで、データを「見る」だけでなく「追加する」ところまでできるようになりました。

ルミィ
ルミィ

STEP6クリア!
自分で新しい商品を登録できるようになったね♪

次のSTEPへ

INSERTで新しい商品を追加できるようになりました。

ですが、登録した後になって、

「商品の価格を間違えていた」

「商品名を変更したい」

ということもあります。

そんなとき、商品を削除して登録し直す必要はありません。

次のSTEPでは、UPDATEを使ってすでに登録されているデータを変更する方法を学びます。

→ STEP7「UPDATEでデータを更新しよう」

学習内容を確認したいときは、SQL入門の一覧から各STEPを確認できます。

→ SQL入門|初心者が基礎から学べるSQL学習ガイド

記事URLをコピーしました