2011/02/11 SQLのInsert文をたくさん作る方法


昔書いた社内ブログ記事です。


どうも(p・ω・q)

後輩に「データベースにサンプルデータを入力するのが面倒くさい」と言われました。
聞いたら手作業で1つずつ入力しているとか。

というわけで、データベースのInsert文をいっぱい作る方法を書きます。

+

とりあえず10人分のユーザデータを入力したいということにします。

完成図

SQL
insert into user_table (user_name, group_id, user_email) values ('ユーザー1', '1', '[email protected]');
insert into user_table (user_name, group_id, user_email) values ('ユーザー2', '2', '[email protected]');
insert into user_table (user_name, group_id, user_email) values ('ユーザー3', '3', '[email protected]');
insert into user_table (user_name, group_id, user_email) values ('ユーザー4', '4', '[email protected]');
insert into user_table (user_name, group_id, user_email) values ('ユーザー5', '5', '[email protected]');
insert into user_table (user_name, group_id, user_email) values ('ユーザー6', '6', '[email protected]');
insert into user_table (user_name, group_id, user_email) values ('ユーザー7', '7', '[email protected]');
insert into user_table (user_name, group_id, user_email) values ('ユーザー8', '8', '[email protected]');
insert into user_table (user_name, group_id, user_email) values ('ユーザー9', '9', '[email protected]');
insert into user_table (user_name, group_id, user_email) values ('ユーザー10', '10', '[email protected]');

方法1:プログラムからSQLを実行すればいいじゃない

シェルでもPHPでもループさせながらInsert文を実行させればいいじゃない。
性能試験用のデータはそうやってバッチで入力しますよぅ。

自分用ならせいぜい100件くらいでしょうし、あんまり性能を考えずに
Insert文を100個連発してもそんなに大した時間じゃないと思いますよ。

・・たぶんw

方法2:SQL文でループを使えばいいじゃない

SQLにもループはあるんですよ。私はこの方法を使っています。

サンプルコードを貼ろうと思いましたが、家のPCにPostgres環境がないのでやめました。
あ、今家ですよ。三連休なのに、雪なうですよ。

方法3:Excelで生成すればいいじゃない

プログラマのくせにプログラム書きたくないっていうならExcelでいいじゃない(笑)
こっちの方が早いこともありますよね。

たぶん詳細の説明はいらないでしょうが、気が向いたので書きました!

1. 元になるSQL文を書く

2. Excelにコピペする

数字を含む部分は列を分けないと、片方しか1、2、3、…、ってインクリメントしてくれないですよ。

3. 数字を増やしながら複製する

セルの右下を引っ張るとコピーできる、おなじみのアレです。
オートフィルっていう名前があるらしいですね。

こっちもコピー。

4. テキストエディタにコピペする

全部のセルをまとめてコピー。

ペタ。
コピペは「コピー+ペタ」だと思っていましたよ。

5. そのままだとタブがあるので半角スペースに変換する

セルとセルの間にタブができちゃうので半角スペースに直します。
削除でもいいですけれど。

置換できないテキストエディタを使っている人は問題外です(`・ω・´)キリッ

6. あ、入力するカラム1つ忘れてた!ってときに

2つ目のカラム(group_id)の後ろに3つ目のカラム(user_email)を追加します。
方法はいくらでもありますが、置換を使いましょう。

まずはカラム名のところを変更。

置換前: group_id
置換後: group_id, user_email

次に値のところを変更。
こっちは全部違う番号が振ってあるので、正規表現で置換します。

正規表現って何ですかって言われたので、これについて今度書こうかなー。
まぁ、こういう方法もあるってことで。これ楽しいですよ。

置換前: '([0-9]+)'
置換後: '\1', 'email\[email protected]'

ちなみにこの例で使っているのはサクラエディタですが、
これは短径選択とかマクロとか色々便利ですよねー。

7. 完成

まとめ

他にも方法はいろいろありそうですね。

後輩を見ていて思うのですが、知らないことに気づくっていうのは、何を知らないかがわからないので結構むづかしいんじゃないかなってことです。

「こういうものがある」っていうヒントや単語を少しでも知っていればGoogle先生も答えてくれますが、そうでない場合に新しいことをオンラインで知るのって結構むづかしいですよね。

カバディっていうスポーツの名前も特徴も知らないのに、このスポーツの存在に気が付くことはむづかしいっていうことですね。

欲しい情報の見つけ方っていうのは、割と重要ですね。
あとは、自分から情報を探しにいくだけじゃなくて、RSSを購読するとかも役に立ちますよね。

テレビでニュース番組を見るようなものです。
うちにはテレビと呼べるものがありませんが。