MySQLのINSERT INTO文でWHERE句を使う2つの方法を実例つきで解説
MySQLでは、INSERT INTOコマンドに条件付き挿入(WHERE句)を組み合わせることが可能です。INSERT文にはWHERE句を直接記述できませんが、SELECT文と組み合わせることで、条件を満たす場合だけ行を挿入するといった制御が実現できます。主な方法は以下の2つです。
方法1:ダミーテーブル(DUAL)を使う
この方法では、ダミーテーブル「dual」から値をSELECTしながら条件を指定し、その結果をINSERTします。MySQLでもDUALが利用できるため、単一の値を条件付きで挿入したいケースに便利です。基本構文は以下の通りです。
INSERT INTO table_name(column1,column2,column3,…) SELECT value1,value2,value3,… FROM dual WHERE [conditional predicate];
実行例
mysql> Create table testing(id int, item_name varchar(10)); Query OK, 0 rows affected (0.15 sec) mysql> Insert into testing (id,item_name)Select 1,'Book' From Dual Where 1=1; Query OK, 1 row affected (0.11 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> Select * from testing; +------+-----------+ | id | item_name | +------+-----------+ | 1 | Book | +------+-----------+ 1 row in set (0.00 sec)
上記の例では、まずテーブル「testing」を作成し、ダミーテーブルdualと条件式「1=1」を使って1行を挿入しています。条件が真(TRUE)と評価されれば行が挿入され、偽(FALSE)であれば何も挿入されません。この仕組みを応用すれば、アプリケーション側の分岐処理を減らし、SQLだけで挿入の可否を制御できます。
方法2:同じ構造を持つテーブルから条件付きで挿入する
別のテーブルと同じ構造を持つテーブルへデータをコピーしたい場合にも、INSERT INTO+WHERE句による条件付き挿入が有効です。次の例では、テーブル「dummy」から「id = 1」の行だけをテーブル「dummy1」へ挿入しています。
mysql> Insert into dummy1(id,name)select id, name from dummy Where id =1; Query OK, 1 row affected (0.06 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> select * from dummy; +------+--------+ | id | Name | +------+--------+ | 1 | Gaurav | | 2 | Aarav | +------+--------+ 2 rows in set (0.00 sec) mysql> select * from dummy1; +------+--------+ | id | Name | +------+--------+ | 1 | Gaurav | +------+--------+ 1 row in set (0.00 sec)
このように、INSERT ... SELECT構文とWHERE句を組み合わせることで、元テーブルの中から条件を満たす行だけを抜き出して挿入できます。「dummy」と同じ構造を持つ「dummy1」に対して、「id = 1」の行のみが追加されていることが結果から確認できます。
まとめ
MySQLのINSERT文自体にはWHERE句を直接記述できませんが、①DUAL表を使った単純な条件付き挿入、②INSERT ... SELECTによる他テーブルからの条件付きコピー、という2つのアプローチで柔軟に条件制御が可能です。データ移行やバッチ処理などで特定条件のレコードだけを登録したい場面で、ぜひ活用してみてください。
-
MySQLでDISTINCT句をWHERE句・LIMIT句と組み合わせて使う方法
MySQLのクエリにおいて、DISTINCT句にWHERE句を組み合わせて使用すると、結果セットから重複を除いた一意な行を返す際の条件を指定することができます。また、DISTINCT句にLIMIT句を組み合わせれば、サーバーが返す一意な行数の最大値を制限することも可能です。使用例以下は、「testing」というテーブルに対して、DISTINCT句をWHERE句およびLIMIT句と一緒に使用した例です。mysql> Select * from testing; +------+---------+---------+ | id | fname | Lname | +------
-
MySQLビュー(VIEW)にWHERE句を使う方法をわかりやすく解説
MySQLビューでWHERE句を使用する方法MySQLでは、作成済みのビュー(VIEW)に対して、通常のテーブルと同じようにWHERE句を指定してデータを絞り込むことができます。基本となる構文は以下の通りです。select * from yourViewName where yourColumnName=yourValue;それでは、実際にサンプルを使って手順を確認していきましょう。1. サンプルテーブルを作成するまず、学生情報を格納するテーブルを作成します。mysql> create table DemoTable1432 -> ( -> StudentId