法政大学国際文化学部

情報システム概論

担当 重定 如彦

20041213

 

12回 データベース(その3)

1.       クエリ その1

クエリとは、データベースのデータの中から特定のフィールドを抽出(ピックアップ)して作成した表のことです。データベースのテーブルには一般的に数多くのフィールドが設定されますが、データベースのデータを利用する際には必ずしも全てのフィールドのデータが必要なわけではありません。クエリを使うことで用途に応じて必要なデータだけを表示する表を作成することが可能です。

クエリを作成するには、データベースウィンドウの左で「クエリ」をクリックし、右の「デザインビューでクエリを作成する」をクリックして下さい。まず、下図のように、表示するデータが格納されたテーブルを選択するためのパネルが表示されます。

このパネルでテーブルを選択し、追加ボタンをクリックするとそのテーブルがクエリのデザインビューに追加されます。ここでは、「生徒表」を追加し、「閉じる」ボタンをクリックして下さい。前図のように、上部に生徒表のフィールド名の一覧が追加されます。

ウィンドウの下部は、クエリで表示するフィールドを編集する部分です。クエリで表示するフィールドを設定するには以下のいずれかの操作を行って下さい。

 

·           上部のテーブルのフィールド名の一覧を表示しているウィンドウから、クエリに追加したいフィールドを選択し、ダブルクリックする。

·           下部の「フィールド」及び「テーブル」をクリックし、表示するフィールドの名前と、そのフィールドを持つテーブルをメニューから選択する。

 

上記の操作で「名前」と「学年」と「受講科目1」を設定してください。


 下部の残りの行は以下の意味を持ちます。

Ø         並べ替え:クエリの表示の順番を、そのフィールドのデータを使って並べ替えます。

Ø         表示:この部分のチェックをOFFにするとそのフィールドがデータシートビューで表示されなくなります。

Ø         抽出条件:この部分に条件を設定することでその条件を満たすデータのみを抽出して表示することが可能です。記述の方法は、先週解説したフォームフィルタと同じです。

Ø         または:この部分に抽出条件を記述することで、抽出条件を複数設定することができます。「または」が示すとおり、いずれかの条件が満たされていれば表示が行われます。

 

 ここでは、「学年」の「並べ替え」に昇順を設定して下さい。クエリのデザインビューの設定が出来たら、テーブルの場合と同様に保存し、クエリの名前を付けて下さい。今回はそのまま「クエリ1」という名前で保存して下さい。クエリのデータを表示するには、テーブルの場合と同様にデータシートビューを表示すればOKです。下の図のように、設定したフィールドで、データが学年の昇順で並べ替えられたクエリが表示されるはずです。

次に、デザインシートビュー表示し、学年の抽出条件の部分に「<=2」を入力し、1、2年生だけをデータシートビューで表示するようにしてみて下さい(後で元に戻すこと)。

 クエリはデータベース内の必要なデータだけを抽出して表示する為に使うのが一般的であり、テーブルと異なりデータを入力する為には通常使用しません。クエリを使ってテーブルにデータを入力することはやろうと思えば可能ですが、データベース内のデータの整合性がとれなくなってしまう可能性があるので慣れないうちは行わないほうが無難です。

2.       クエリ その2 (リレーションシップ)

 クエリで複数のテーブルのフィールドを関連付けて表示することが可能です。関連付けて表示を行うには、ルックアップウィザードなどを使ってそれらのテーブルのあるフィールドが、別のテーブルのあるフィールドと関係付けられている必要があります。この参照関係をリレーションシップと呼びます。先ほどのクエリのデザインシートビューを表示し、マウスの右ボタンをクリックし、メニューから「テーブルの表示」を選択して下さい。再び、テーブルの一覧を表示したパネルが表示されるので、「科目表」を追加し、ウィンドウを閉じて下さい。デザインシートビューの上部に図のように「科目表」のウィンドウが追加されます。この時、「生徒表」の「受講科目1」と「科目表」の「科目ID」が線で繋がって表示されますが、この線がリレーションシップを表す線です。前回の授業で「生徒表」の「受講科目1」に対してルックアップウィザードで「科目表」のデータを参照するように設定をおこなったため、このようなリレーションシップが作成されています。なお、リレーションシップでは必ず「参照するフィールド」と、「参照されるテーブルの主キーフィールド」が線で結ばれます。クエリに科目表のフィールドをクエリに追加する方法は先ほどと同様です。図のように、科目表の「科目名」、「セメスター」、「曜日」、「時限」、「担当講師」のフィールドをクエリに追加しデータシートビューを表示して下さい

 

 
データシートビューは2つのテーブルの関連するフィールドを繋ぎ合わせた表になります(下図)。
注:この例では、「受講科目1」と「科目名」で同じ内容が重複して表示されますが、これは2つのテーブルのデータがちゃんと関連付けられて表示されることを表すためにそのようにしています。

3.       クエリ その3 応用

 クエリに同じテーブルを追加し、同時に複数のリレーションシップを設定することが可能です。クエリのウィンドウを一旦閉じて、生徒表のデザインシートビューで「受講科目2」というフィールドを追加し、「受講科目1」と同様設定をルックアップウィザードで行って下さい。次に、データシートビューで以下のようにデータを設定して下さい。
 次に、クエリ1のウィンドウを再び開き、デザインシートビューで右ボタンをクリックし、「テーブルの表示」を選択し、科目表を一つ追加し、「閉じる」をクリックして下さい。デザインシートビューの上部に2つ目の「科目表_1」(同じ名前だと区別ができないので、_1という文字が名前の後ろに自動的につきます)というウィンドウが追加されるはずです。このウィンドウは生徒表と線で結ばれていないので、生徒表の受講科目の部分でマウスをドラッグし、「科目表_1」の「科目ID」の上でリリースして下さい。すると図のようにリレーションシップを表す線が結ばれるようになります。
 次に、「科目表_1」の「科目名」、「セメスター」、「曜日」、「時限」、「担当講師」をダブルクリックし、クエリのフィールドに追加し、データシートビューを表示して下さい。受講科目2に関する「科目名」、「セメスター」、「曜日」、「時限」、「担当講師」がクエリの表に追加して表示されるようになります。
 このように、同じテーブルを複数クエリに配置し、それぞれ異なったリレーションシップを設定することで、この例題のように、受講科目1、受講科目2のそれぞれのセメスターや曜日などのデータを独立して関連づけて表示する事ができるようになります。

4.      リレーションシップの削除

 ルックアップウィザードで一度他のテーブルを参照するフィールドの設定を行うと、その設定を後から変更するためには一度作成したリレーションシップを削除する必要があります。リレーションシップの削除を行うには、メニューの「ツール」→「リレーションシップ」を実行してください。テーブル間のリレーションシップを表示したウィンドウが表示されるので、リレーションシップを表す線の上にマウスカーソルを移動させ、マウスの右ボタンで表示されるメニューのなかから「削除」を選択することでリレーションシップを削除することができます。(注:リレーションシップを削除すると、ルックアップウィザードを使って新しい参照を設定することができるようになりますが、新しい参照の設定を行うまでは、以前に行った設定がそのまま残るようです)

 また、リレーションシップの削除とは関係ありませんが、何か操作を行おうとした場合に他のテーブルが開いている為に操作が行えないというエラーパネルが表示される場合があります。そのようなエラーパネルが表示された場合は、エラーパネルに表示されているエラーの原因となったウィンドウをすべて閉じてから操作を行ってください。

5.      データベースを作成する際の一般的な手順

 実際に自分でデータベースを作ろうと思った場合は以下の手順で行うとよいでしょう。

·           何の為にデータベースを作りたいのか、目的を整理する。
目的もなくデータベースをただ漠然と作っても良いデータベースを作成することはできません。作成する前にあらかじめデータベースを作って何がしたいのかをはっきりとさせておくことで、テーブルの設計を行いやすくなります。

·           目的にあったテーブルを設計する。
 例えば自分の家の本棚の本を整理するためのデータベースを作成しようと思った場合、どんなデータがデータベースに入っていれば便利かを考えましょう。例えば「本のタイトル」だけでなく、「本の分類」、「本の保管場所」などのフィールドを作成し、それらのデータを入れておけば後で自分の探したい本がどこにあるのかを、データベースを使って容易に見つけ出すことができるようになります。

 

 

·           テーブルを必要に応じて複数作成する。
例えば本棚の場合、本のデータを格納するテーブル、本棚のデータを格納するテーブル(本棚に棚がいくつあるか、それぞれの棚にはどんな種類の本を格納するかなどのデータを入れる)など必要に応じて本に関係するデータを扱うテーブルを作成する。

·           テーブル同士をルックアップウィザードなどを使って連携させる。
 例えば上記の例の場合、本のデータのテーブルの「本の格納場所」というフィールドを本棚のデータのテーブルにルックアップウィザードを使って連携させる。

·           実際にデータを入力する。
上記の作業で入れ物の設計が完成しますので、後はデータを入力して下さい。

·           目的に応じて必要なデータのみを表示するクエリを作成する。

·           作成しテーブルやクエリに対して、検索や並べ替え機能を使って利用する。

 

 なお、授業で解説したAccessの機能はデータベースの機能のほんの一部でしかありません。実際にAccessを使って本格的なデータベースを作成する場合は、AccessのヘルプやAccessの解説書などを参考に自分で学習して下さい。

6.      課題

 前回の課題のbaseball.mdbを開き以下の操作を行い、課題のメールに添付して送ること。
·           「チーム表」の中の「チーム名」、「勝率」、「打率」、「防御率」の4つのフィールドのみを表示するクエリを作成せよ。なお、作成したクエリの名前は「クエリ1」のままで良い。また、上記のクエリをデザインビューを使って打率の高い順に表示するように設定せよ。
·           「打撃成績」の中の「選手名」、「チーム名」、「打率」、「本塁打」の4つのフィールドのみを表示するクエリを作成せよ。なお、作成したクエリの名前は「クエリ2」とすること。また、上記のクエリを「打率が.310以上の選手のみ」を、「本塁打の多い順」に表示するように設定せよ。
·           「打撃成績」の中の「選手名」、「打率」、「安打」、「打点」、「本塁打」及び、「チーム表」の中の「チーム名」、「勝率」を表示するクエリを作成せよ。作成したクエリの名前は「クエリ3」とすること。また、上記のクエリをデザインビューを使って「安打数が140以上」、「本塁打が20以上」の選手で「打点の多い順」に表示するように設定せよ。
 
注1:クエリなどの中身をデータシートビューで表示しようとした時に、エラーパネルが表示されてうまく表示できない場合は他のテーブルやクエリのウィンドウを全て閉じてから表示すること。
注2:>=や数字などを入力する際には必ず半角で入力すること。
 
 
 

7.      期末試験

 期末試験は、試験期間中に筆記試験で行います。具体的な日程は後日発表されるはずなのでそちらを見てください。試験範囲は、授業で行った範囲で、持ち込みは不可とします。この授業は複数の教官が担当しているので、授業で説明しなかった部分が一部出題される可能性がありますが、その点は考慮する予定です。プリントだけでは不安な方は教科書のほうもざっと眺めておくと良いでしょう。 なお、残念ながら、毎年何人か試験で不正行為を行う人がいます。不正行為が発見された場合、すべての教科の単位を取り消するなどの重い処分が行われますので、くれぐれも不正行為は行わないで下さい。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
出席、課題のメールはta04k026@edu.i.hosei.ac.jpにお願いします。

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

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