【MySQL入門】INSERT文を使いこなす!基本からSELECT句まで一挙紹介

皆さんMySQLつかっていますか?

今回はINSERT文について紹介していきます。

INSERTはデータを追加するためのクエリです。

INSERTがなければデータベースは単なる空のテーブルに過ぎないわけで、データベースと非常に密接に関係したクエリとも言えますね。

データベースの要となる追加の構文、しっかりとマスターしていきましょう!

INSERT文の基礎

まずはINSERT文の基本的な使い方から学びましょう。

基本の書式は次のようになります。

INSERT INTO テーブル名 (カラム名1, カラム名2, ……)
VALUE(値a1, 値a2, ……),
(値b1, 値b2, ……),
……;

今まで見てきたシンプルなクエリと比べると少し長めです。

ただ、やっていることはとてもシンプルで、「テーブル名」のテーブルにある「カラム名」のそれぞれのカラムに「値a1値a2, ……」の値を挿入していく、というものです。

実際にクエリをつかって動かしてみましょう。

まずはデータベースを作り、INSERTするためのテーブルまで作成しましょう。

データベースやテーブルの作成に不安のある方はこちらで復習できますので、是非ご覧ください。


【MySQL入門】CREATE TABLE文でテーブルを作成する方法
更新日 : 2019年6月18日

クエリ

実行結果

ひとまずこのようなテーブルができたことを確認してください。

INSERT文を実際に使う

それでは実際にINSERTをつかって、テーブルの中身を埋めていきましょう。

カラム名を省略したINSERTの書き方

一番シンプルな使い方は次のような書き方になります。

実行結果

INSERTは(カラム名)の指定が省略可能で、省略した場合はVALUE以下の値ですべてのカラムの値を指定する必要があります。

今回の例で行くと、id、名前、年齢すべてをVALUE以下で記入しているのが確認できますね。

カラム名を省略しないINSERTの書き方

カラム名を省略しない書き方は次のようになります。

実行結果

このように、カラム名を指定した書き方では指定したカラムに合わせて値をVALUE以下に記入する必要があります。

今回は年齢を記入しなかったので、ageカラムがNULLになっていますね。

INSERTで値の無かったカラムにはNULLが設定されます。

カラムにNOT NULL制約をかけていた場合、INSERT自体がエラーになってしまいますので、カラムの設定をしっかり理解した上でINSERTは行うようにしましょう。

複数のレコードを同時に挿入する

INSERTは複数のレコードを同時に挿入することができます。

方法はかんたんで、VALUE以下の()を増やしていくだけです。

実際にクエリを見てみましょう。

実行結果

SELECT句を使った応用

ここではSELECT句を使った少々応用的なINSERTの使い方を紹介します。

今まではひとつのテーブルに対して値を挿入する方法を見てきましたが、時には他のテーブルにある値を別のテーブルにも記入したい場合があります。

複数の支社のある会社の社員名簿で、社員が転属するようなケースですね。

そこで利用できるのがINSERT INTO SELECT構文です。

SELECT自体はクエリとして使い慣れている方も多いでしょう。

今回もテーブル全体を表示するのに活躍しています。

これをINSERT INTOの句に使うことで、SELECTで選びだしたものをテーブルに挿入する、という方法が使えるようになるのです。

さっそく書式をみてみましょう。

INSERT INTO テーブル名1 (カラム名A, カラム名B, ……)
SELECT テーブル名2.カラム名 FROM テーブル名2 WHERE 条件;

INSERT文のVALUE以下が丸々SELECTに置き換わったような構造をしています。

もうひとつ特徴的なのが、SELECTで指定するカラム名はどちらのテーブルを使うかを明示するため、テーブル名2.カラム名という書き方になっています。

テーブル名とカラム名をピリオド(.)でつなぐ書き方ですね。

これはカラム名の出どころを明らかにしたいときにしばしば出てくるので、合わせて覚えておいてください。

それでは実際に動かしてみましょう。

まず参照元となるテーブル2を作ります。

実行結果

ここまでは問題ありませんね。

では、このinsert_table2から、即戦力になりそうな30歳以上の人をinsert_tableに移行させてみましょう。

クエリは次のようになります。

実行結果

最初のクエリはテーブル1のidにオートインクリメントを設定しておきました。

テーブルに追加する場合、idを主キーにしておくと重複未設定の問題が生じます。

それを回避するための一時しのぎです。

クエリの2つ目が本丸のINSERT INTO SELECT構文です。

これは、テーブル1であるinsert_tableのname, ageに対して、テーブル2のname, ageカラムの情報を書き込む。

ただし、ageが30以上であること、というクエリになります。

実行結果をみると、確かにageが30以上の二人がテーブル1に追加されているのが確認できますね。

まとめ

いかがでしたか?

今回はINSERT文について、基本的な使い方から、少し応用のINSERT INTO SELECT構文まで紹介しました。

データの追加について、INSERT自体はそこまで難しいものではないことが体感できたのではないでしょうか。

INSERT文はSQLを構成するデータの新規追加・読み込み・変更・消去の第一歩です。

ここから一歩ずつMySQLを習得していき、最後はSQLが自在に操れることが一つの到達点と言えるでしょう。

頂上を目指し、まずは一歩ずつ前に進んでいきましょう。

この記事が皆様のMySQL学習の一助となれば幸いです。

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

平山 晃

平山 晃

フリーのエンジニア・ライター。
プログラミング、ライティング、マーケティングなど、あらゆる手段を駆使して、
ハッピーなフルリモートワーカーを目指し中。

最近興味がある分野は深層強化学習。
積みゲー、積ん読がどんどん増加しているのがここ数年の悩み。
実は侍エンジニア塾の卒業生だったりします。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説