データベースの基本操作として、データの「追加」「更新」「削除」「選択」が挙げられます。
本記事では、データの「追加」方法について、基本的な操作からサンプルを交えた具体的な解説までを行っていきたいと思います。
目次
SQLでのデータ追加方法を理解しよう!
SQLでのデータ追加には「INSERT文」を使用します。
今回は中でもよく利用される記述方法として、下記の3種類をご紹介していきます。
- 列名指定有り
- 列名指定無し
- SELECT文の結果を追加
SQLのデータ追加1: 列名指定有り
SQLでデータを追加する際、列名を指定したINSERT文の記述方法についてご紹介していきます。
基本構文
列名を指定したINSERT文の基本構文は下記となります。
INSERT INTO テーブル名 (列名, 列名, ...) VALUES(値, 値, ...);
列名を指定してINSERT文を作成する場合、記述した列名と値の数は一致していないといけません。
また、列名に定義された型と登録する値の型は一致している必要があります。
テーブルに存在する指定されなかった列には、デフォルト値またはNULLが登録されます。
サンプル
ではサンプルで実際に動きを確認してみましょう。
今回のサンプルテーブルは下記のコマンドで作成しました。
CREATE TABLE test1(id int, name varchar(30), age int, register_date datetime default current_timestamp);
次にデータを追加するSQLですが、今回は「id」と「name」列のみを指定してINSERT文を発行してみます。
INSERT INTO test1(id, name) VALUES(1, "山田太郎");
SELECT文で確認してみると下記の結果となっています。
+------+--------------+------+---------------------+ | id | name | age | register_date | +------+--------------+------+---------------------+ | 1 | 山田太郎 | NULL | 2020-08-23 15:49:41 | +------+--------------+------+---------------------+
サンプルでは、「age」列にはデフォルトを設定していないため「NULL」が登録されており、「regester_date」列にはデフォルト値として設定した、実行した際の現在日時が登録されています。
SQLのデータ追加2: 列名指定無し
次にSQLでデータを追加する際、列名を指定せずに登録する方法についてご紹介していきます。
基本構文
列名を省略したINSERT文の基本構文は下記となります。
INSERT INTO テーブル名 VALUES(値, 値, ...);
列名を省略する場合、テーブルに定義された列名の順番通りに値を指定する必要があります。
また、テーブルのカラムが増えた場合など、意図しないカラムに値が設定される可能性もあるため、列名指定無しでINSERT文を利用する際には、チーム内でテーブル定義変更の規約を徹底するなど注意が必要です。
サンプル
今回利用するサンプルテーブルは下記のコマンドで発行しました。
CREATE TABLE test1(id int, name varchar(30), age int);
列名を省略してINSERT文を実行してみましょう。
INSERT INTO test1 VALUES(1, "山田太郎", 30);
登録した後のデータを確認してみると、下記のように指定した順番通りにデータが登録されていることがご確認頂けます。
+------+--------------+------+ | id | name | age | +------+--------------+------+ | 1 | 山田太郎 | 30 | +------+--------------+------+
複数のデータをまとめて追加
データを追加する際、1つのレコードだけでなく、まとめてデータを追加したい場合もあるでしょう。
もちろんINSERT文で複数データをまとめて追加することは可能です。
INSERT INTO test1 VALUES(値, 値, ...), (値, 値, ...) ...;
では実際にサンプル用のSQLで実行してみましょう。
INSERT INTO test1 VALUES(2, "山田花子", 25), (3, "佐藤一郎", 20);
追加したデータをSELECT文で確認すると、複数データが登録されていることが分かります。
+------+--------------+------+ | id | name | age | +------+--------------+------+ | 1 | 山田太郎 | 30 | | 2 | 山田花子 | 25 | | 3 | 佐藤一郎 | 20 | +------+--------------+------+
SQLのデータ追加3: SELECT文の結果を追加
SQLのデータ追加で意外と需要が高いのが、あるテーブルから抽出したデータを別のテーブルへINSERTする処理です。
バックアップテーブルの作成時など、頻繁に利用されます。
基本構文
SELECT文の結果を利用したINSERTの基本構文は下記の通りです。
INSERT INTO テーブル名 (カラム名, カラム名, ...) SELECT (カラム名, カラム名, ...) FROM テーブル名 (WHERE 条件式);
サンプル
今回はサンプルとして、既存の「user」テーブルを「user_bk」テーブルにコピーする処理を実施してみたいと思います。
userテーブルのデータは下記のように設定されています。
+------+--------------+------+ | id | name | age | +------+--------------+------+ | 1 | 山田太郎 | 30 | | 2 | 山田花子 | 25 | | 3 | 佐藤一郎 | 20 | | 4 | 田中次郎 | 40 | | 5 | 鈴木三郎 | 50 | +------+--------------+------+
user_bkテーブルは下記のコマンドでテーブルを作成し、データが空の状態とします。
CREATE TABLE user_bk(id int, name varchar(30), age int, backupdate datetime default current_timestamp);
実際にuserテーブルからuser_bkテーブルにバックアップを取得するSQLは下記のように作成します。
INSERT INTO user_bk(id, name, age) SELECT id, name, age FROM user;
実行後、user_bkテーブルのデータを確認してみましょう。
+------+--------------+------+---------------------+ | id | name | age | backupdate | +------+--------------+------+---------------------+ | 1 | 山田太郎 | 30 | 2020-08-23 20:41:02 | | 2 | 山田花子 | 25 | 2020-08-23 20:41:02 | | 3 | 佐藤一郎 | 20 | 2020-08-23 20:41:02 | | 4 | 田中次郎 | 40 | 2020-08-23 20:41:02 | | 5 | 鈴木三郎 | 50 | 2020-08-23 20:41:02 | +------+--------------+------+---------------------+
さいごに:SQLでのデータ追加は超頻出処理のひとつ
本記事では、SQLでのデータ追加について、3種類の方法をサンプルを交えながらご紹介してきました。
データベース関連の処理を扱う上で、INSERT文の扱いは必須知識のひとつです。
ぜひご自身で様々なパターンのテーブルを作成してみて、INSERT処理の動きを把握出来るよう何度も練習してみてください。
今回のように全てのデータを別テーブルに追加したい場合には、カラム名を指定せず「*」で代用することも可能です。