データベースの基本的な操作として「追加」「更新」「選択」「削除」の4つが挙げられます。
本記事では、データベースへのデータ追加に使用するINSERT文について、基本的な操作方法をサンプルコードを交えながらご紹介していきたいと思います。
SQLでデータ追加 INSERT文の基本構文
まずはSQLでデータを追加する基本パターンについて構文を確認していきたいと思います。
テーブルに関しては、下記のCREATE文をサンプル用に実行しました。
CREATE TABLE user(id int, name varchar(10), age int);
INSERT文の基本構文
INSERT文の基本構文は下記の通りです。
INSERT INTO テーブル名 VALUES(値, 値, ...)
INSERT文を実行する際、カラム名を指定しない方法では、テーブルのカラム数と同様の値を指定する必要があります。
カラム数分の値を指定したサンプル
実際にカラム数分の値を設定し、テーブルにデータが追加されるのかを確認してみましょう。
INSERT INTO user VALUES(1, "山田花子", 22);
SELECT文でデータを確認してみましょう。
+------+--------------+------+ | id | name | age | +------+--------------+------+ | 1 | 山田花子 | 22 | +------+--------------+------+
指定したデータが追加されていることをご確認頂けます。
テーブルのカラム数値を指定しなかった場合
では、テーブルのカラム数、値を指定しなかった場合にはどういった結果が返ってくるのかについても確認しておきましょう。
INSERT INTO user VALUES(2, "山田太郎");
実行すると下記の画像のような結果が表示されます。
このようにカラム数が一致していないとエラーとなり、データの追加処理が正常に行われません。
カラムに特定のデータを追加したく無い場合
では、例えば名前が不明のユーザーを登録したい場合などは、どうすれば良いのでしょうか?
INSERT文ではテーブルと同じカラム数の値を指定する必要があるため、特定のデータを追加したくないカラムには「NULL」を指定します。
INSERT INTO user VALUES(2, NULL, 33);
実行した結果を確認してみると、下記のように名前がNULLに設定されたデータが追加されていることをご確認頂けます。
+------+--------------+------+ | id | name | age | +------+--------------+------+ | 1 | 山田花子 | 22 | | 2 | NULL | 33 | +------+--------------+------+
SQLでカラム名を指定したデータ追加方法
次にカラム名を指定してデータを追加する際の記述方ほうについてご紹介します。
特定のカラムにのみデータを追加したい場合などは、こちらの書き方が利用されます。
サンプルのテーブルは上記と同様ですが、追加したデータを全て削除している状態です。
TRUNCATE TABLE user;
カラム名指定のINSERT基本構文
カラム名を指定する際のINSERT文は下記のような記述となります。
INSERT INTO テーブル名(カラム名, カラム名, ...) VALUES(値, 値, ...)
カラム名を指定しなかった場合、値はテーブルに存在するカラム数指定してあげる必要がありましたが、カラム名を指定した場合には、指定したカラムに対しての値のみ設定すれば問題ありません。
カラム名指定のサンプル
では実際にカラム名を指定してデータの追加処理を実施してみます。
INSERT INTO user(id, name) VALUES(1, "山田花子");
idと名前だけを入力し、年齢のカラムは指定せずに実行した結果が下記の通りです。
+------+--------------+------+ | id | name | age | +------+--------------+------+ | 1 | 山田花子 | NULL | +------+--------------+------+
このように指定していないカラムには自動的にNULLが設定されていることをご確認頂けます。
テーブルが変更されてカラムが増えた場合、SQL自体の変更をしなくても動作に支障がないメリットがあります。
テーブルにNOT NULL指定のカラムが存在する場合は要注意
カラム名さえ指定すればテーブルの構造は気にしなくて良いのかというとそういうわけではありません。
NOT NULL指定のカラムが存在する場合には、デフォルト値が設定されていない場合、SQL実行エラーとなり処理が失敗してしまいます。
まずサンプルのuserテーブルにALTER文でNOT NULLのカラムを1つ増やしてみましょう。
ALTER TABLE user ADD valid BOOLEAN NOT NULL;
今回はデータが有効か無効かを判定するためのvalidというカラムをNOT NULL指定で追加してみました。(デフォルト値の指定は無し)
では実際にカラム名指定のINSERT文で、NOT NULL指定のカラムを記述しなかった場合どうなるのか確認してみましょう。
INSERT INTO user(id, name) VALUES(2, "山田太郎");
下記の画像のように、デフォルト値が設定されていないNOT NULLの項目が存在する場合にはエラーとなってしまうため、注意が必要です。
SQLで抽出したデータをテーブルに追加する
SQLでのデータ追加の方法として、もうひとつよく利用されるのが、テーブルから取得したデータを別のテーブルへ追加するという方法です。
例えばバックアップ用のテーブルにデータをコピーする場合などに利用出来ますね。
少し応用編とはなりますが、利用用途の多い処理ですので、ぜひ使いこなしてみてください。
今回利用するサンプルとして、下記のバックアップテーブルを用意しておきます。
CREATE TABLE user_bk(id int, name varchar(10), age int, bk_date date DEFAULT(CURRENT_DATE));
またuserテーブルは下記のように作り直しています。
+------+--------------+------+ | id | name | age | +------+--------------+------+ | 1 | 山田花子 | 22 | | 2 | 山田太郎 | 33 | | 3 | 佐藤一郎 | 44 | +------+--------------+------+
SELECT文を利用したINSERT基本構文
別テーブルから抽出したデータを追加する際のINSERT文は下記のような記述となります。
INSERT INTO 追加するテーブル名(カラム名, ...) SELECT カラム名, ... FROM 取得するテーブル名;
SELECT文を利用したINSERT処理のサンプル
では実際に用意したuserテーブルのサンプルデータを利用して、バックアップを取得するSQLを記述してみます。
INSERT INTO user_bk (id, name, age) SELECT id, name, age FROM user;
実行すると、userテーブルから取得したカラムの値をそのままINSERT INTOで指定したuser_bkテーブルに追加していることがご確認頂けます。
+------+--------------+------+------------+ | id | name | age | bk_date | +------+--------------+------+------------+ | 1 | 山田花子 | 22 | 2020-07-19 | | 2 | 山田太郎 | 33 | 2020-07-19 | | 3 | 佐藤一郎 | 44 | 2020-07-19 | +------+--------------+------+------------+
bk_dateに関しては、テーブル作成の際にデフォルト値としてSQLが実行された日付を自動で追加するように設定しています。
さいごに:SQLのデータ追加処理は必須知識の1つ
本記事では、SQLのデータ追加処理について基本的な構文と利用方法をご紹介してきました。
データベースにおいて、データ追加の処理は必須知識の1つです。
今回ご紹介した基本を抑えた上で、ご自身が開発されるプログラムにも応用出来るよう、しっかりと理解していきましょう。
データの確認には下記のSQLコマンドを実行しました。