[[授業/H19/情報処理]] *あのテーマをもう一度: [#web78425] **Q: SQLiteって、どんな場面で役に立つのですか? [#m6b73081] ***A: 2つ以上の大きな表を比較しなければならないとき、役に立ちます。 [#ocac6386] 授業では名簿と成績表という2つの表を結びつける操作で、データベースの使用例を学びました。この例では、 沢山のデータが入った、2つの大きなデータの集まり(表)がある 2つを比較したいのだけど、一つ一つを目で見て比較するのは面倒 という場合です。実際のケースとしては、次のような場合があるでしょう。 -ケース1:参加者が600人ぐらいの学会の会計をやることになりました。参加者はウェブから参加登録をするのですが、会費は郵便振替です。参加費未納者には、振り込みの督促状を送らなければなりません。また、一般会員か学生会員かに従って、振り込むべき金額と実際の振り込み金額が一致しているかどうかをチェックする必要があります。最終的には、ウェブからの参加登録データと、郵便振替の入金リストの2つを比較して、参加費未納者や、振り込み金額間違いのリストを作ります。また、登録データから、メールアドレスを抜き出して、督促状を送ります。 ~このケースでは、2つの表があります。 ウェブ登録で得られた参加者のデータ 氏名、連絡先、振り込み金額、メールアドレスなどが入っている(後にmeiboと呼ぶ表) 郵便局から得られた振り込みリスト:振り替え伝票から氏名、日付、振り込み金額をリストにしたもの(後にfurikomiと呼ぶ表) ~手作業で解決するならば、それぞれの表をエクセルで作成し、氏名で並び替え、上から順に、会費未納の人はいないか(まれに、2回振り込んでしまっている人もいます)、振り込み金額が間違っている人がいないかどうかをチェックします。でも、未納者だけなら目でみて探しても、そんなに時間はかかりませんが、振り込み金額の間違えまでもチェックしていると、かなり大変な作業になります。 ~こういう場合、SQLiteを使ってmeiboとfurikomiとでもいう2つのテーブルを使えば、目でみてチェックする作業をコンピュータにやらせることができるのです。例えば、次のようなSQLを1行かけば、処理は済んでしまいます。 > select meibo.namae, e-mail, kingaku, furikomi.kingaku from meibo left outer join furikomi on meibo.namae = furikomi.namae where meibo.kingaku != furikomi.kingaku order by furikomi.kingaku desc; -ケース2:植物の野外実習で、野外で採集した植物に全てラベル(採集者や採集日、採集場所、種名などのデータが書かれたもの)をつけて提出することになりました。幸い、日本の植物について和名と学名の対応表は電子データで持っているのですが、採集した100種の植物について、一件ずつ名前を調べて、コピーペーストするのは面倒です。 ~このケースでも2つの表があります。 野生植物に関する和名、学名、科名などの対応表(後にyaseiと呼ぶ表) 自分が野外で採集した100種の植物の和名リスト(後にcollectionと呼ぶ表) ~この場合もSQLiteを使って、yaseiとcollectionとでもいう2つのテーブルを作れば、何度も検索やコピペを繰り返さなくても、和名と学名の対応表が出来てしまいます。 > select collection.wamei, gakumei from collection left outer join yasei on collection.wamei = yasei.wamei order by collection.wamei; -ケース3:SQLiteはウェブページと連携して使うことで、データの抽出、並び換え、表示などいろんなサービスを提供できます。例えば、皆さんの個人成績の返却ページは、SQLiteと似たソフトウェアであるPostgreSQLを用いて作成しています。このサーバでサービスを行っているYListをいう和名・学名の検索サイトも、PostgreSQLを使っています。こういうネットワークデータベースを作成しようと思うと、もうちょっと修行が必要になりますけどね。 --SQLと同様のデータベースを利用しているウェブサイトの例: ---YList ---日本植物学会 ---成績返却ページ