SQLのステートメントの中でも最も登場する頻度の高いものの1つに「INSERT INTO」があります。本記事では、「INSERT INTO」について分かりやすく解説をしつつ、実際に手を動かして学べる「INSERT INTO」ハンズオンをご紹介していきます。
SQLの「INSERT INTO」とは?
SQLの「INSERT INTO」とはデータベースのテーブル上にデータを登録する際に使用されるステートメントの構文です。
SQLには基本的な機能として、「データベースやテーブルの作成・削除」と「データの挿入・削除・更新・取得」があります。そして「INSERT INTO」は、「データの挿入」の役割を担うステートメントの構文なのです。
「INSERT」というステートメントを使用する際には、以下のように2通りの構文どちらかを記述する必要があります。
INSERT INTO テーブル名(カラム名1, カラム名2, カラム名3, ...) VALUES (値1, 値2, 値3, ...);
INSERT INTO テーブル名 VALUES (値1, 値2, 値3, ...);
2つを見比べてみると、テーブル名の後にカラム名を書いているかどうかの違いがありますね。2つ目のINSERTステートメントのように省略することも可能ですが、明示的にSQL文を記述する必要がある場合には1つ目のような記述の仕方をします。
「INSERT INTO」が「INSERT」ステートメントの構文であると書いたのは、上記の例のように「INSERT」の後に「INTO」が必要であるからです。
SQLステートメントの構文はセットで記憶しておくと、スムーズにSQL文を書くことができて便利です。以下はSQLステートメントの一例です。
- 「UPDATE テーブル名 SET カラム名1 = 値1, カラム名2 = 値2, … (WHERE 条件);」
- 「DELETE FROM テーブル名 (WHERE 条件);
- 「SELECT カラム名1, カラム名2, … FROM テーブル名 (WHERE 条件);」
【関連記事】
▶︎SQL select文のサンプル集 結合、ソート、別テーブル生成の記述方法は?
▶︎【実例で学ぶ】SQL「UPDATE」文の使い方 基礎・応用編
▶︎【初心者向け】SQLのDELETE文の使い方を現役SE目線で解説
SQLの「INSERT INTO」をMySQLで使ってみよう
それでは、早速「INSERT INTO」を使ってSQLステートメントの動きを体験してみましょう。今回のハンズオンでは、MySQLというデータベースを使用していきます。
準備
「INSERT INTO」を使うためには、データベースとテーブルがなくてはなりません。まずはそれらの準備から行いましょう。
MySQLのインストール
まだMySQLのインストールができていないという場合には、以下のコマンドでHomebrewからインストールを行いましょう。
$ brew install mysql
MySQLのインストールが終了したら、接続します。
$ sudo mysql -u root -p
データベースの作成
ターミナルからMySQLに接続ができたら、早速データベースの作成をしていきます。以下のSQLコマンドをそのまま打ち込んでください。
mysql> CREATE DATABASE potepan; Query OK, 1 row affected (0.00 sec)
上記のコマンドはSQLの「CREATE」ステートメントです。この「CREATE」ステートメントによって、データベースやテーブルの作成を行うことができます。
【関連記事】
▶︎SQL create tableでテーブル生成 DBMSごとに差異あり
データベースを作成できたら、使用するデータベースを指定しましょう。
mysql> USE potepan;
テーブルの作成
作成したデータベース内に、テーブルを作成してみましょう。
mysql> CREATE TABLE foods(food_id INT, name VARCHAR(50), price VARCHAR(50)); Query OK, 0 rows affected (0.00 sec)
これでfoodsという名前のテーブルがデータベース上に作成されました。テーブル構造を見るには「DESC」というコマンドが使用できます。
mysql> desc foods; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | food_id | int(11) | YES | | NULL | | | name | varchar(50) | YES | | NULL | | | price | varchar(50) | YES | | NULL | | +---------+-------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
SQLの「INSERT INTO」を使ってみよう!
それでは早速、SQLの「INSERT INTO」を使ってみましょう。
まずは、foodsテーブル内にデータが何も挿入されていないことを確認しておきます。
mysql> SELECT * FROM foods; Empty set (0.00 sec)
単一のレコードを挿入
まずは単一のレコード挿入にチャレンジしましょう。ここで、レコードという言葉が初めて出てきました。レコードとは、テーブルにおける横の行のことです。
mysql> INSERT INTO foods(food_id, name, price) VALUES('0001', 'Banana', '100'); Query OK, 1 row affected (0.00 sec)
「Query OK, 1 row affected」と表示されると、SQLの「INSERT」ステートメントが成功したこと、そして1行(1 row)のレコードが挿入されたことがわかります。データの取得ができる「SELECT」ステートメントでテーブルの状態を見てみましょう。
mysql> SELECT * FROM foods; +---------+--------+-------+ | food_id | name | price | +---------+--------+-------+ | 1 | Banana | 100 | +---------+--------+-------+ 1 row in set (0.00 sec)
複数のレコードを挿入
次に2つのレコードを挿入してみましょう。
mysql> INSERT INTO foods(food_id, name, price) VALUES('0002', 'Bread', '400'),('0003', 'Meat', '800'); Query OK, 2 rows affected (0.01 sec)
こちらもINSERTステートメントが成功しました。SELECTステートメントでテーブルを見てみましょう。
mysql> SELECT * FROM foods; +---------+--------+-------+ | food_id | name | price | +---------+--------+-------+ | 1 | Banana | 100 | | 2 | Bread | 400 | | 3 | Meat | 800 | +---------+--------+-------+ 3 rows in set (0.00 sec)
省略形「INSERT」ステートメントを使ってみる
前述の通り、「INSERT」ステートメントには2通りの書き方がありました。念のため、こちらでは省略した形式「INSERT」ステートメントを試してみましょう。
mysql> INSERT INTO foods VALUES('0004', 'Onion', '200'); Query OK, 1 row affected (0.01 sec)
無事にレコードを挿入することができました。こちらの方がSQL文としては短く記述できるため、手間が省けますね。
まとめ
SQLのステートメントの中でも登場する頻度が非常に高い「INSERT INTO」。本記事では、「INSERT INTO」について分かりやすく解説をしつつ、実際に手を動かして学べる「INSERT INTO」ハンズオンをご紹介していきました。
本記事でご紹介したハンズオンをもとに、まずはテーブル上に意図したデータを挿入できるように使い慣れていきましょう。
【関連記事】
▶︎SQL文一覧 基本4大ステートメントのサンプルコード集
▶︎SQL order byでソート指定するサンプルコード集 指定のレコードだけ先頭に並べるには?
▶︎SQLとはどういうもの? 独自拡張と標準SQLの大きな違いって、何?
そもそも「INSERT」という英単語には「挿入」の意味があります。テーブルの上にデータを「挿入する」という意味合いでステートメントに「INSERT」という名前がつけられたのでしょう。