第16回 テーブル定義の変更と応用練習 - MySQL講座
サカイ先生のMySQL講座
Lecutures on PHP
第16回 テーブル定義の変更と応用練習 (その3)
都道府県テーブル定義の変更(データ投入編)
- それじゃ次はデータの登録をするよ。「4. データの投入」だ。
- なんか今日の先輩、いつもにも増してチャキチャキしていますね(笑)。
- やることいっぱいあるから、どんどん進まないと日が暮れちゃうからね。って、もう日は暮れているけど(笑)。 さて、太郎君がみつけてきてくれたデータを prefecture テーブルに入れよう。いま prefecture テーブルの population カラムがどんなふうになっているかな。
- そういえば、テーブル定義は確認したけど中のデータは見ていませんでしたね。見てみます。
mysql> SELECT * FROM prefecture;
+------+----------+------------+
| code | name | population |
+------+----------+------------+
| 01 | 北海道 | NULL |
| 02 | 青森県 | NULL |
:(略)
| 46 | 鹿児島県 | NULL |
| 47 | 沖縄県 | NULL |
+------+----------+------------+
47 rows in set (0.00 sec)
population カラムには NULL って値が入っていますね。
- そう。まぁ、正確には NULL は "値" ではないんだけどね。
じゃ、このカラムを人口の数字で更新するための構文はどう?
- えぇと、、、、 UPDATE を使って、、、、、
UPDATE prefecture SET population=[人口] WHERE name="[都道府県名]";
これでどうでしょう。
- それでもいいけど、、、、。さっきのサイトから太郎君が取ってきたデータ、どんな風になっているか見せてくれるかな。
- はい。こんな感じで用意しました。
北海道 5,570 青森 1,407 岩手 1,364 宮城 2,347 秋田 1,121 山形 1,198 福島 2,067 茨城 2,969 栃木 2,014 群馬 2,016 埼玉 7,090 千葉 6,098 :
- このままだとWHEREに書いた [都道府県名] がマッチしないね。ほら、我々が持っているデータは「県」とか「都」とかがついているだろう?
- 本当だ。 WHERE name="秋田" とやっても更新してくれないってことなのですね。
- これも僕の経験上の話なんだけど、更新条件の指定、つまりWHERE句でマッチさせるカラムはできれば文字列じゃないほうがいいと思っているんだ。
今回みたいに人間にとっては「茨城」も「茨城県」も同じように理解できるものでも、SQLでは厳密に一致するかしないかを判断するし、同じに見える字でも異字体だったりすることがあるなど、特に漢字などのマッチングでは作業上のミスが起きやすい。
だから僕は、可能であれば文字列ではなくコード類のカラムを使って更新条件を指定するように心がけているんだよ。
- なるほど。ということは先ほどのSQLは、こうしたほうがいいのですね。
UPDATE prefecture SET population=[人口] WHERE code="[都道府県コード]";
先ほどの都道府県データも書き換えてみました。都道府県コードをつけたのと、人口が x1000 だったはずなので、実際の人口の数字にしました。
01 北海道 5570000 02 青森 1407000 03 岩手 1364000 04 宮城 2347000 05 秋田 1121000 06 山形 1198000 07 福島 2067000 08 茨城 2969000 09 栃木 2014000 10 群馬 2016000 11 埼玉 7090000 12 千葉 6098000 :
- うん。いいね。じゃぁこれを使って文字列加工でさっきのSQLひな形に当てはめてよ。
- はい。(ごりごりごりごり)
できました。これです。
UPDATE prefecture SET population=5570000 WHERE code='01'; UPDATE prefecture SET population=1407000 WHERE code='02'; UPDATE prefecture SET population=1364000 WHERE code='03'; UPDATE prefecture SET population=2347000 WHERE code='04'; UPDATE prefecture SET population=1121000 WHERE code='05'; UPDATE prefecture SET population=1198000 WHERE code='06'; UPDATE prefecture SET population=2067000 WHERE code='07'; UPDATE prefecture SET population=2969000 WHERE code='08'; UPDATE prefecture SET population=2014000 WHERE code='09'; UPDATE prefecture SET population=2016000 WHERE code='10'; UPDATE prefecture SET population=7090000 WHERE code='11'; UPDATE prefecture SET population=6098000 WHERE code='12'; UPDATE prefecture SET population=12758000 WHERE code='13'; UPDATE prefecture SET population=8880000 WHERE code='14'; UPDATE prefecture SET population=2405000 WHERE code='15'; UPDATE prefecture SET population=1106000 WHERE code='16'; UPDATE prefecture SET population=1170000 WHERE code='17'; UPDATE prefecture SET population=816000 WHERE code='18'; UPDATE prefecture SET population=877000 WHERE code='19'; UPDATE prefecture SET population=2180000 WHERE code='20'; UPDATE prefecture SET population=2104000 WHERE code='21'; UPDATE prefecture SET population=3801000 WHERE code='22'; UPDATE prefecture SET population=7360000 WHERE code='23'; UPDATE prefecture SET population=1876000 WHERE code='24'; UPDATE prefecture SET population=1396000 WHERE code='25'; UPDATE prefecture SET population=2635000 WHERE code='26'; UPDATE prefecture SET population=8812000 WHERE code='27'; UPDATE prefecture SET population=5589000 WHERE code='28'; UPDATE prefecture SET population=1410000 WHERE code='29'; UPDATE prefecture SET population=1019000 WHERE code='30'; UPDATE prefecture SET population=600000 WHERE code='31'; UPDATE prefecture SET population=731000 WHERE code='32'; UPDATE prefecture SET population=1953000 WHERE code='33'; UPDATE prefecture SET population=2873000 WHERE code='34'; UPDATE prefecture SET population=1474000 WHERE code='35'; UPDATE prefecture SET population=800000 WHERE code='36'; UPDATE prefecture SET population=1006000 WHERE code='37'; UPDATE prefecture SET population=1452000 WHERE code='38'; UPDATE prefecture SET population=782000 WHERE code='39'; UPDATE prefecture SET population=5056000 WHERE code='40'; UPDATE prefecture SET population=859000 WHERE code='41'; UPDATE prefecture SET population=1453000 WHERE code='42'; UPDATE prefecture SET population=1828000 WHERE code='43'; UPDATE prefecture SET population=1203000 WHERE code='44'; UPDATE prefecture SET population=1143000 WHERE code='45'; UPDATE prefecture SET population=1730000 WHERE code='46'; UPDATE prefecture SET population=1373000 WHERE code='47';
- よさそうだから、これを mysql コマンドに流し込んで実行しようか。
- はい。チャキチャキ!(笑)
実行しました。内容確認してみます。
mysql> SELECT * FROM prefecture;
+------+----------+------------+
| code | name | population |
+------+----------+------------+
| 01 | 北海道 | 5570000 |
| 02 | 青森県 | 1407000 |
:(略)
| 46 | 鹿児島県 | 1730000 |
| 47 | 沖縄県 | 1373000 |
+------+----------+------------+
47 rows in set (0.00 sec)
- いくつか目視でデータの数字を確認してみましたが、正しく登録されているようです。
- オッケー。





ページのトップへ


今回のような実践的な経験がエンジニアのキャリアに繋がると思います。是非サービスを成功させて下さい!