法政大学国際文化学部

情報システム概論

担当 重定 如彦

2010112

 

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

1.      クエリ その1(クエリの作成)

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

クエリを作成するには、「作成」タブ→「その他」→「クエリウィザード」をクリックして下さい。「新しいクエリ」というパネルが表示されるので「選択クエリウィザード」を選び、「OK」ボタンをクリックして下さい。次のような「選択クエリウィザード」パネルが表示されるので、「テーブル/クエリ」のメニューからテーブルを選択し、「選択可能なフィールド」から表示したいフィールドを選んで「>」ボタンをクリックすることでクエリに表示するフィールドを選択できます。

図のように「打撃成績」テーブルの「選手名」、「チーム」、「打率」の3つのフィールドを選択して「次へ」ボタンをクリックして下さい。次にクエリで集計を行うかどうかを選択するパネルが表示されるので、「各レコードのすべてのフィールドを表示する」にチェックを入れて「次へ」ボタンをクリックして下さい。最後に「クエリ名を指定してください」の下のテキストボックスに作成するクエリの名前を設定し(クエリの名前は後で変更可能なのでそのままでもかまいません)、「クエリを実行して結果を表示する」にチェックを入れて「完了」ボタンをクリックすると次の図のようなクエリが作成されます。

 

 

異なったテーブルのレコードのフィールドを一つのクエリでまとめて表示することも可能です。選択クエリウィザードのパネルを開き、「打撃成績」のテーブルの「選手名」、「チーム」、「打率」のフィールドと、「チーム表」のテーブルの「勝率」のフィールドを選択し、後は先ほどと同じ操作を行うと次のようなクエリが作成されます。なお、クエリを作成した後は、「テーブル/クエリ」のメニューに作成したクエリも表示されるようになるので間違えてそちらを選択しないように注意して下さい。

 

2.      クエリ その2(デザインビュー)

クエリのデザインビューを使って、クエリに表示するフィールドの選択や、表示するデータの並べ替えや検索を行うことができます。クエリのデザインビューはテーブルのデザインビューと異なる点に注意して下さい。先ほど作成したクエリを表示し、「ホーム」タブ→「表示」→「デザインビュー」を選択して下さい。次のような画面が表示されます。

 

 

デザインビューの上部には、クエリの表示に使用するテーブルがウィンドウ状の図で表示されます。内部に表示されるのはそれぞれのテーブルのフィールド名の一覧です。2つの表を結ぶ線は次に説明する「リレーションシップ」を表します。

 

デザインシートビューの下部は、クエリで表示するフィールドを編集する部分です。

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

·       上部のテーブルのフィールド名の一覧を表示しているウィンドウから、クエリに追加したいフィールドを選択し、ダブルクリックする。「*」をダブルクリックするとそのテーブルのすべてのフィールドを選択したことになります。

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

·       下部の「フィールド」の中の文字を削除することで、クエリからそのフィールドを削除することができます。

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

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

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

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

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

 

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

3.      リレーションシップ

複数のテーブルのフィールドの関連付けをリレーションシップ(relationship)と呼びます。前回の授業でルックアップウィザードを使って「打撃成績」のテーブルの「チーム」のフィールドと「チーム表」のテーブルの「チーム名」のフィールドを結び付けましたが、その作業によって実はリレーションシップの設定が行われています。ルックアップウィザード以外の方法でテーブルのリレーションシップを設定するには「データベースツール」タブ→「表示/非表示」→「リレーションシップ」を選択します。

 

 

図のテーブルを表すウィンドウを結ぶ黒い線がリレーションシップを表しており、線の左の「チーム表」の「チーム名」のフィールドと線の右の「打撃成績」の「チーム」のフィールドがリレーションシップで関連付けられていることがわかります。

 

 

リレーションシップを削除するにはリレーションシップの線の上でマウスを右クリックし、「削除」メニューを選択します。新しいリレーションシップを作成するにはマウスのドラッグ操作でフィールドとフィールドを結び付けてください。

クエリの場合、テーブルのリレーションシップとは別に、クエリ毎にリレーションシップを設定することができます。クエリのリレーションシップはクエリのデザインビューで行います。リレーションシップの作成や削除の方法は先ほどと同様の方法で行えます。

リレーションシップによって、関連付けた2つのフィールドの内容が同一のレコード同士が結びつくことになります。この時、一般的に関連付けるフィールドの片方を「主キーフィールド」に設定します。これには主に以下の2つの理由があります。

·           作成したクエリのフィールドに、主キーフィールドの性質を持つフィールドを作ることができる。

·           片方のテーブルのレコードに対して、もう片方のテーブルのレコードを一つだけ結びつけることが可能になる。

先ほどのクエリでは、「打撃成績」テーブルの「チーム」のフィールドが、「チーム表」のテーブルの主キーフィールドである「チーム名」のフィールドに関連付けられています。具体的には下図の矢印のように、左のテーブルのレコードは右のテーブルのレコードのいずれか一つのレコードに結び付けられます。これは主キーフィールドには「同じ内容のデータが存在するレコードが複数存在しない」という性質があるためです。なお、このことは逆の方向では成り立たない点に注意してください。たとえば「チーム表」のテーブルの「チーム名」のフィールドが「巨人」のレコードに対応する「打撃成績」のテーブルのレコードは「ラミレス」と「小笠原」の2つ存在します。

 


 

クエリのリレーションシップによって関連付けた2つのフィールドに、同じ内容のデータが存在しないレコードが存在する場合、そのクエリを「データシートビュー」で表示した場合、対応するレコードは画面に表示されなくなります。

 

 

例えば先ほどのクエリのリレーションシップを削除し、新しく「打撃成績」の「打点」のフィールドと「チーム表」の「負数」のフィールドを関連付け、「データシートビュー」で結果を表示してください。この場合、たまたま「打点」と「負数」が一致している宮本選手と坂本選手のレコードのみが表示されることなり、他の選手のレコードは「打点」のフィールドの内容と「負数」の内容が一致するレコードが存在しないため、画面に表示されなくなります。

クエリのリレーションシップによって関連付けた2つのフィールドに同じ内容のデータをもつレコードが複数存在する場合は、クエリにその数だけレコードが作成されます。例えばクエリウィザードで「チーム表」の「チーム名」と「勝率」のフィールド、「打撃成績」のテーブルの「選手名」と「打率」のフィールドの順で新しいクエリを作成して下さい。以下のように同じチーム名に対して複数のレコードが作成されて表示されます。

 

 

上のクエリと前のクエリは一見違うもののように見えるかもしれませんが、リレーションシップが同じなので、結び付けられるレコードの組み合わせは全く同じです。この2つのクエリは表示するフィールドの順番が異なるだけで、実は全く同じ内容になります。上の図とこのプリントの2Pのクエリの図を見比べて内容が同じであることを確認して下さい。

クエリのリレーションシップを設定しなかった場合は、「打撃成績」の各レコードに対して「チーム表」の6つのレコードが対応づけられたレコードが作成されます。先ほどのクエリのリレーションシップを削除し、「データシートビュー」で表示し確認して下さい。

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

 

 

 

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

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

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

·           目的にあったテーブルを設計する。

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

·           テーブルを必要に応じて複数作成する。

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

·           テーブル同士をルックアップウィザードなどを使って関連づける。

例えば上記の例の場合、本のデータのテーブルの「本の格納場所」というフィールドを本棚のデータのテーブルにルックアップウィザードを使ってテーブル同士をリレーションシップによって関連づける。

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

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

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

 

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

 

 

 

 

 

 

5.      課題

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

6.      期末試験

期末試験は、試験期間中の122日の5限に筆記試験で行います。掲示板に掲示されているはずなので必ず確認して下さい。試験範囲は、授業で行った範囲で、持ち込みは不可とします。この授業は複数の教官が担当しているので、授業で説明しなかった部分が一部出題される可能性がありますが、その点は考慮する予定です。プリントだけでは不安な方は教科書のほうもざっと眺めておくと良いでしょう。なお、残念ながら、法政大学全体で毎年何人か定期試験で不正行為を行う人がいるようです。不正行為が発見された場合、すべての教科の単位を取り消するなどの重い処分が行われますので、くれぐれも不正行為は行わないで下さい。
 
 
 
 

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

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

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