法政大学国際文化学部

情報システム概論

担当 重定 如彦

20091222

 

13回 データベース(その2)

1.      データの検索、置換、並び替え

まず先週の課題のbaseball.accdbを開いてください。左の「打撃成績:テーブル」をダブルクリックすると右に課題で作成したテーブルが表示されるようになるはずです。

Ø  データの検索 その2(フィルタ)

先週紹介した検索の方法では検索したデータは選択状態になりましたが、フィルタを使って、検索条件に一致するレコードのみを表示することが可能です。フィルタを使うには、検索したいデータが格納されているセルをクリックし、「ホーム」タブの「並べ替えとフィルタ」内の「フィルタ」をクリックして下さい。この操作を行うと、メニューが表示されます。メニューの内容は選択中のセルに文字が入っている場合と数字が入っている場合で異なります。文字が入っている場合は「テキストフィルタ」、数字が入っている場合は「数値フィルタ」のメニューを選択してください。サブメニューが表示されるのでその中から一つを選択し、さらに表示されるパネルに文字や数字を入力してOKボタンをクリックすると指定した条件のレコードのみが表示されるようになります。設定した条件をクリアするには、フィルタボタンをクリックして表示されるメニューから「○○のフィルタをクリア」を選択します。フィルタによって表示されなくなったレコードは、画面に表示されなくなっただけでデータがテーブルからなくなったわけではありません。フィルタを設定すると「並べ替えとフィルタ」内の「フィルタの実行」ボタンが押された状態になるので、このボタンをクリックしてフィルタを解除することで、元の表示に戻すことができます。

 

l  例1:安打数が170以上の選手だけを表示するには、「安打の列のいずれかのセルをクリック」→「フィルタボタンをクリック」→「数値フィルタ」→「指定の値より大きい」→「パネルに170を入力」→「OKボタンをクリック」を実行する。
(次の例2を実行する前に「フィルタボタンをクイック」→「安打のフィルタをクリア」を実行して下さい)

l  例2:チームが中日の選手だけを表示するには、「チームの列のいずれかのセルをクリック」→「フィルタボタンをクリック」→「テキストフィルタ」→「指定の値に等しい」→「パネルに中日を入力」→「OKボタンをクリック」を実行する。

フィルタの検索条件はそれぞれのフィールド毎に設定することができます。複数のフィールドに対して検索条件を設定した場合は、すべての条件を満たすレコードのみが表示されるようになります。例えば例1と例2を同時に設定した場合は、安打数が170以上でチームが広島の選手のレコードのみが表示されます。このような検索を絞り込みと呼びます。

フィルタによる検索を使うことで、○○以上の数値を検索するといった先週紹介した検索方法では不可能な検索を行うことができます。文字の場合は「指定の値を含む」を選択することで特定の文字が入ったデータを検索することも可能です。なお、一部の文字だけを使って検索することを、部分一致検索、それに対し先ほど説明した文字全体を使って検索することを完全一致検索と呼びます。

Ø  データの検索 その3(選択フィルタ)

「並べ替えとフィルタ」の「選択」ボタンをクリックすると選択中のセルのデータを基準に検索することができます。例えば内山選手のレコードの552が入力されている打数のフィールドのセルをクリックして選択し、「選択」ボタンをクリックするとこの「552」を基準とした検索のメニューが表示されます。

Ø  データの検索 その4(フォームフィルタ)

Accessではフォームフィルタを使ってさらに詳細な検索を行うことができます。フォームフィルタを使うには、「並べ替えとフィルタ」内の「詳細設定」ボタンをクリックして表示されるメニューから「フォームフィルタ」を選択します。フォームフィルタを実行すると、テーブルからレコードの表示が消え、フォームフィルタの検索条件を設定するための、以下のような画面が表示されます。

フィールドの名の下のセルをクリックし、表示される▼ボタンをクリックすると、そのフィールドに入力されているデータの一覧が表示されます。一覧から選択することで、選択した文字や数値と一致するレコードだけを検索することができるようになります。また、フォームフィルタでは以下のような検索を行うことが可能です。
·           検索条件の部分に >= 500のような不等式をキーボードから記述することで、フィールドの中身が500以上のレコードを検索するといった検索を行うことができます。
·           検索条件の部分に「*一」のように、半角の*記号と検索したい文字を並べて入力することで部分一致検索を行うことが出来ます。半角の*記号は「ワイルドカード」と呼ばれる特殊な記号でトランプのジョーカーのようにその部分にはどんな文字が入っても良いという意味を持ちます。入力後に自動的にセルの内容がLike “*一“のように変化しますが、そちらが正式な検索の設定方法です。Likeを省略して入力すると自動的にLikeが挿入されます。
·           50以上100以下のような検索を行いたい場合は「Between 50 And 100」と入力します。
·           下部の「または」のタブをクリックし、別々のタブに異なる検索条件を設定することで、例えば「巨人」または「広島」のチームの選手を検索することができる。
 
検索条件の設定を完了後に、「並べ替えとフィルタ」内の「フィルタの実行」をクリックすると、設定した全ての検索条件を満たすレコードのみが表示されるようになります。フォームフィルタで設定した検索条件をクリアするには、「詳細設定」→「すべてのフィルタのクリア」を実行します。
また、フォームフィルタの画面で「詳細設定」→「閉じる」を実行することフォームフィルタの設定を中止して元の画面に戻ることができます。
なお、「フィルタ」や「選択」ボタンで検索条件を設定した後に、「詳細設定」→「フォームフィルタ」を実行すると設定した検索条件が「フォームフィルタ」に反映されるので参考にして下さい。
 

Ø  データの並び替え

フィールド名をクリックし、「並べ替えとフィルタ」内の「昇順」または「降順」をクリックすることで、指定したフィールドのデータを使って、レコードを並び替えることができます。
各自、打率、打数、安打などのフィールドで並べ替えを行って下さい。

2.      ルックアップウィザード その1

データベースのフィールドのデータ型のメニューから「ルックアップウィザード」を選択することで、フィールド内のデータをメニューから選んで入力することができるようにすることができます。例えば打撃成績の「チーム」のフィールドのように、6種類のチーム名以外のデータが入らないようなフィールドはルックアップウィザードを使って入力可能なチームをメニューから選択できるようにするとデータの入力が楽になります。

まず、デザインビューを表示し、チームのフィールドのデータ型のメニューから「ルックアップウィザード」を実行し、表示されるパネルの「表示する値をここで指定する」を選択して次へボタンをクリックして下さい。次のページの図のような、フィールド内に入れることが可能なデータの一覧を入力するパネルが表示されるので、図のように6つのチーム名を入力し、次へボタンをクリックして下さい。最後にラベルを指定するパネルが表示されますが、ここはあらかじめ「チーム」という文字列がテキストボックスに入っているはずなのでそのまま「完了」ボタンをクリックして下さい。なお、「複数の値を許可する」というボタンがありますがそれは設定しなくてもかまいません。

これで設定が完了しましたので、データを保存し、データシートビューを表示し、チームのフィールドをクリックしてみてください。フィールドの右にメニューを表示するための▼ボタンが表示され、それをクリックすると先ほど設定したチーム名をメニューから選択することができるようになっているはずです。なお、ルックアップウィザードは先にデータの型を指定してから使用する必要がある点に注意して下さい。

 

3.      複数のテーブル

Accessでは、一つのデータベースに複数のテーブルを作成することが可能です。例えば先ほどのデータベースに、チームに関するデータを格納する為のテーブルを作成してみましょう。2つ目以降のテーブルを作成するには「作成」タブの「テーブル」内の「テーブル」をクリックします。新しいテーブルが作成されるので、次の図のようなフィールドを作成し、上書き保存を行い、テーブルに「チーム表」という名前をつけて下さい。

 

次にデザインビューで以下のように設定して下さい。

 

 

なお、設定の際に以下の作業を行ってください。

·           チーム名を主キーフィールドにする。

·           IDのフィールドを削除する。

·           勝率のデータ型を「数値型」に設定した後に下の部分の「フィールドサイズ」を図のように「単精度浮動少数点型」に設定する。

 

上書き保存を行い、データシートビューに表示を戻し、以下のようなデータを入力して下さい。

 

 

 

 

複数のテーブルを作成した場合、画面左の一覧からテーブルの名前の部分をダブルクリックするか、画面右の上部のテーブル名が表示されたタブをダブルクリックすることで任意のテーブルのウィンドウを切り替えて表示することができます。

4.      ルックアップウィザード その2(テーブルの連携)

テーブルのフィールドの中のデータを他のテーブルの中のフィールドのデータの中から選択して入力することができます。これを行うにはルックアップウィザードを使用します。

まず、打撃成績のテーブルを表示し、デザインシートビューに表示を切り替えてください。次に、チームのデータ型から「ルックアップウィザード」を選択し、「テーブルまたはクエリの値をルックアップ列に表示する」を選択し、「次へ」ボタンをクリックして下さい。

以下の手順で設定を行って下さい。

·           どのテーブルのデータを使用するかを選択するパネルが表示されるので、「テーブル:チーム表」を選択し、次へボタンをクリックする。

·           どのフィールドのデータを使用するかを選択するパネルが表示されるので、左の「選択可能なフィールド」から「チーム名」を選択し、「>」ボタンをクリックして「選択したフィールド」に移動して下さい。同様の方法で「勝率」も移動して下さい。ここで「選択したフィールド」に移動したフィールドがルックアップで表示されるメニューに表示されることになります。

·           次へボタンをクリックすると、ルックアップのメニューに表示される項目の順番の並べ替えを設定するパネルが表示されます。勝率順にメニューを表示したい場合は1の左に勝率を設定し、右のボタンをクリックして「降順」を設定します。

·           次へボタンをクリックすると表示する列の幅を選択するパネルが表示されます。今回の例では「キー列を表示しない(推奨)」のチェックをはずしてください。調整が終わったら、完了ボタンをクリックして下さい。
「キー列を表示しない(推奨)」というボタンは、主キーフィールドにオートナンバー型のデータを設定した場合にチェックをONにすると良いでしょう。これは、オートナンバー型のデータを表示しても数字が表示されるだけで却って意味がわかりにくくなるためです。今回のように、それ以外の場合はOFFにすると良いでしょう。

·           次にフィールドを選択するパネルが表示されます。ここでは表示されたフィールドの中から一意に行を特定可能なフィールド(同じ値が複数存在しないフィールド)を選択してください。一般的には主キーフィールドを選択します。今回の例では主キーフィールドである「チーム名」を選択すると良いでしょう。

·           最後にラベルを設定するウィンドウが表示されるので、そのまま完了を選択します。
データシートビューでいずれかのレコードのチームのフィールドをクリックすると以下の図のような表示になるはずです。

このように、関係データベースでは、複数のテーブルの中のデータをお互いに連携して利用することが可能です。この例では、選択したフィールドに複数の項目を設定することで、上記の図のように、メニューには複数のフィールドのデータが一覧で表示されます。なお、メニューから選択した結果、「チーム」のフィールド内には一番左の項目しかデータが表示されません。また、上記の方法で設定したルックアップの内容を変更する場合、以下の手順を行う必要があります。

l  「打撃成績」のデザインビューを表示する。

l  「データベースツール」タブの「表示/非表示」内の「リレーションシップ」をクリックする。

l  次のような表示がされるのでチーム表と打撃成績を結ぶ線をクリックし、マウスの右ボタンをクリックして表示されるメニューから「削除」を選択する。

 

 

リレーションシップとは異なったテーブル同士の関係を表しています。先ほどルックアップウィザードを使って「チーム表」のテーブルのデータを「打撃成績」のテーブルの「チーム」のフィールドと結びつけました。先ほどの図は結び付けられた2つのテーブルの関係を線で結びつけるという方法で表しています。図から「チーム表」の「主キーフィールド」である「チーム名」が「打撃成績」の「チーム」に結び付けられていることがわかります。関係データベースの「関係(リレーションrelation)」はこのようにテーブル同士を関連つけることができることから名づけられています。なお、リレーションシップについては次回の授業でさらに詳しく説明する予定です。

ルックアップウィザードですでに結び付けられた関係を新しいものに更新したい場合は、この線を削除してテーブル同士の関係を削除する必要があります。

5.       課題

今回使ったbaseball.accdbを開き以下の操作を行い、課題のメールとしてTAさんに送ること。
l  いずれかのフィルタを使って以下の検索をおこなうこと。答えとしては検索結果のうち、選手名のみを記述すれば良い。
Ø  打率のフィールドが0.305以上のレコードを検索する。
Ø  打点のフィールドが50以上100以下のレコードを検索する。
Ø  チームが「巨人」で本塁打が30以上のレコードを検索する。
l  並べ替えを使い、以下の検索を行うこと。
Ø  打数が多い順に並べ替え、上位3名の選手名を記述する。
Ø  打点が少ない順に並べ替え、下位3名の選手名を記述する。
l  フィルタと並べ替えを使い、以下の検索を行うこと。
Ø  「巨人」、「ヤクルト」、「横浜」の選手を検索し、本塁打数の多い順に並べ替えて上位3名の選手名を記述する。
Ø  打数が400以上550以下で本塁打が10以上の選手を検索し、安打数の多い順に並べ替えて上位3名の選手名を記述する。
l  ルックアップウィザードを使い、今回行ったと同様の操作を行い、打撃成績のテーブルの「チーム」と「チーム表」を関連付けること。ただしその際に以下の作業を行うこと。
Ø  「選択したフィールド」に「チーム名」と「勝率」だけでなくすべてのフィールドを選択する。
Ø  勝率の低い順でメニューが表示されるようにする。
Ø  保存したbaseball.accdbを添付ファイルで送る。
 
 

課題のメールは masaki.yamashita.67@gs-art.hosei.ac.jp までお願いします。

質問のメールなどは、sigesada@.hosei.ac.jpまでお願いします。

授業の資料の最新版はhttp://www.edu.i.hosei.ac.jp/~sigesada/にあります。