STEP 6
様々な問い合わせ方法(2)
サンプルのAccessファイルを使用します。
このページの一番下からDBNew_Sample_Step6.zipをダウンロードして任意の場所で解凍してください。
1. 集約関数とGROUP BY
集約関数(Aggregate Function) とは、複数のデータ行を集約し、1つの値(結果)として返す関数
たとえば、生徒全体の平均点や合計点を求めたいときに使用されます。
📌つまり、SQLでExcelのような関数として使えます。
| 関数 | 説明 | 例 | |
|---|---|---|---|
| SUM() | 合計値を算出 | SELECT SUM(Height) FROM Students; | |
| AVG() | 平均値を算出 | SELECT AVG(Height) FROM Students; | |
| MAX() | 最大値を取得 | SELECT MAX(Height) FROM Students; | |
| MIN() | 最小値を取得 | SELECT MIN(Height) FROM Students; | |
| COUNT() | データ件数をカウント | SELECT COUNT(*) FROM Students; | 📌慣習として(*)を使う |
(1) Studentsテーブルに対して、Height(身長)の平均値を求める
この時、AS を使って列名を定義します。
SELECT AVG(Height) AS 平均身長 FROM Students;
結果のビュー(仮想表)
| 平均身長 |
|---|
| 165 |
(2) Grade(学年)ごとのHeight(身長)の平均値を求める
この時、GROUP BY を使ってGrade でグループ分けします。
📌GROUP BY は集約関数と共に使います。
SELECT Grade, AVG(Height) AS 平均身長 FROM Students
GROUP BY Grade;
結果のビュー(仮想表)
| Grade | 平均身長 |
|---|---|
| 1 | 165 |
| 2 | 164.666666666667 |
| 3 | 165.333333333333 |
2. 副問い合わせ
あるテーブルに対して問い合わせを行ない、その結果を次の問い合わせに利用することを言います。
(1) 生徒の出身中学校を抽出する。
SELECT JHighName
FROM JHighs J
WHERE EXISTS(
SELECT *
FROM Students S
WHERE S.JHighID = J.JHighID);
結果のビュー(仮想表)
| JHighName |
|---|
| 北海道中学校 |
| 東北中学校 |
| 東海中学校 |
| 中国中学校 |
| 四国中学校 |
(2) 出身中学校として生徒がいない中学校を抽出する
SELECT JHighName
FROM JHighs J
WHERE NOT EXISTS(
SELECT *
FROM Students S
WHERE S.JHighID = J.JHighID);
結果のビュー(仮想表)
| JHighName |
|---|
| 関東中学校 |
| 近畿中学校 |
| 九州中学校 |
EXISTSを使うクエリは DISTINCT で書き換え可能なケースもありますが、
SELECT DISTINCT JHighName
FROM Students S, JHighs J
WHERE S.JHighID = J.JHighID;
NOT EXISTS を使うクエリは書き換えが困難で、「当てはまらない」 ものを抽出するのに有効です。
| ファイル名 | サイズ (KB) | ダウンロード |
|---|---|---|
| DBNew_Sample_Step6.zip | 22 |