■ 生徒の成績を5段階で評価(WHERE JOIN) (2000,2002,2003,2007)
成績テーブルと評価テーブルをWHERE句で結合して、成績を5段階で評価します。
1. 新規データベース作成
Accessを起動したら、ツールバーから新規作成のアイコン
をクリックして、作業フォルダworkに新規データベースW050.mdbを作成します。
2. 成績、評価テーブルをインポート
Windowsのエクスプローラを起動したら、[050.mdb]をダブルクリックして開きます。050.mdbのデータベースウィンドウが表示されたら、tbl成績をドラッグしてW050.mdbのデータベースウィンドウにドロップします。同様の手順で、tbl評価をドラッグ&ドロップしてインポートします。テーブルをインポートしたら、050.mdbを閉じます。
3. 新規クエリ作成
データベースウィンドウのオブジェクトから[クエリ]をクリックして選択したら、新規オブジェクトのショートカットから[デザインビューでクエリを作成する]をダブルクリックします。「テーブルの表示」ダイアログが表示されたら、[テーブル]タブから[tbl成績]、[tbl評価]をダブルクリックしてデザインビューに追加します。[閉じる]ボタンをクリックしてダイアログを閉じます。
tbl成績から名前と点数をダブルクリックしてグリッドにコピーします。点数の列の抽出条件に「Between [最小点] And [最大点]」を入力します。tbl評価からIDをダブルクリックしてグリッドにコピーします。
ツールバーから上書き保存のアイコン
をクリックしたら「qry成績5段階評価」の名称で保存します。

図 新規クエリを作成して「qry成績5段階評価」の名称で保存
4. データシートビューに切り替え
ツールバーからデータシートビューのアイコン
をクリックして切り替えます。データシートに生徒の点数と5段階評価が表示されます。閉じるボタン
をクリックしてデータシートを閉じます。

図 データシートに生徒の5段階評価を表示
●解説
ここで作成したクエリは、成績テーブルと評価テーブルをWHERE句で結合しています。WHERE句に抽出条件として(((tbl成績.点数) Between [最小点] And [最大点]))のように指定すると、評価列には点数に対応した評価が表示されます。
|
tbl成績
|
|
tbl評価
|
|
|
||
|
SELECT tbl成績.名前, tbl成績.点数, tbl評価.評価 FROM tbl成績, tbl評価 WHERE (((tbl成績.点数) Between [最小点] And [最大点])) |
||
|
|
||
|
|
実行結果
|
|
図 成績テーブルと評価テーブルをWHERE句で結合したクエリを実行
SQLのWHERE句でtbl成績とtbl評価を結合する代わりに、非等価結合でtbl成績とtbl評価を結合することもできます。非等価結合は、クエリのデザインビューではサポートしていませんのでSQLビューから直接SQLステートメントを入力します。
tbl成績とtbl評価を非等価結合したSQL:
SELECT tbl成績.名前, tbl成績.点数, tbl評価.評価
FROM tbl成績 LEFT JOIN tbl評価
ON tbl成績.点数 Between tbl評価.最小点 And tbl評価.最大点;
5段階評価がもっと複雑になるときは、WHERE句で評価テーブルを結合する代わりにユーザー定義関数Grade()を使用します。この場合、点数列の抽出条件を空白にして、ID列のフィールドを「評価: Grade([点数])」のように書き換えます。
ユーザー定義関数を使用したSQL:
SELECT tbl成績.名前, tbl成績.点数, Grade([点数]) AS 評価
FROM tbl成績;
Public Function Grade(intGrade As Integer) As String
Dim strGrade As String
If intGrade >= 90 And intGrade <= 100 Then
strGrade = "A"
ElseIf intGrade >= 80 And intGrade <= 89 Then
strGrade = "B"
ElseIf intGrade >= 70 And intGrade <= 79 Then
strGrade = "C"
ElseIf intGrade >= 60 And intGrade <= 69 Then
strGrade = "D"
Else
strGrade = "E"
End If
Grade = strGrade
End Function