演習30 「Msqry SQL」 の解説 その3
まず Access で、次の二つの 選択クエリ 4, 6 を作成しておく。

(15) グループ化の応用1 (count, avg, group by, having)
select 住所,count(合計),avg(合計)
from クエリ6
group by 住所
having count(合計) >= 2
(解説) count( ) ... 合計フィールドの該当の件数をカウント
avg( ) ... 合計フィールドの該当の平均
group by ... 住所フィールドでグループ化
having count(合計) >= 2 ... 件数が 2以上 を抽出

(16) グループ化の応用2 (二つのクエリを合体)
select クエリ6.住所,max(クエリ4.合計)
from クエリ4,クエリ6
where クエリ4.氏名=クエリ6.氏名
group by クエリ6.住所
(解説) max ... 最大値を検索
where □=□ ... 共通フィールドで関係付け
group by でグループ化した後、二つのクエリ
から該当項目を検索、計算し表示する。

(17) サブクエリへの拡張1 (select文の中にもう一つ select文を入れる)
select * from テーブル1
where 番号 = any
(select 番号 from テーブル1 where 住所 like '薩%' or 所属='凡人')
order by 番号 desc
(解説) 括弧の中の select文の解釈は、
住所フィールドで '薩' の付く文字、または '凡人' であるものを
テーブル1の番号フィールドの値として抽出する。
それを where の条件として、order by で番号の降順でテーブル1
からレコードを検索し、全てのフィールドを表示する。
(注意) where文には必ず比較演算子(=, > など)と組み合わせて記述する。
= any ( ) ... 括弧内のいずれかと等しければ真
in ( ) としても同意
< all ( ) ... 括弧内のすべてより小さければ真、など。
サブクエリは、select, from, where, having に続く項目として
記述することができる。

(18) サブクエリへの拡張2 (サブクエリのテーブル1 と クエリ4 を合体)
select テーブル1.番号,テーブル1.氏名,テーブル1.住所,クエリ4.結果
from テーブル1,クエリ4
where
テーブル1.ID = クエリ4.ID
and
テーブル1.番号 in
(select テーブル1.番号 from テーブル1
where テーブル1.住所 like '薩%' or テーブル1.所属='凡人')
order by テーブル1.番号 desc
(解説) まず、where に続く テーブル1.ID = クエリ4.ID で、共通の
IDフィールドを指定して、テーブル1 と クエリ4 を関連付け
ている。次の and に続く括弧内がサブクエリ。
テーブル1 の住所フィールドで '薩'の字がつくか、所属フィ
ールドで '凡人'のあるものを検索し、テーブル1 から該当の
レコードのフィールドを表示する。

(19) サブクエリへの拡張3 (テーブル1,クエリ4,クエリ6 を二つのサブクエリで合体)
select テーブル1.番号,テーブル1.氏名,テーブル1.住所,クエリ4.結果,クエリ6.合計
from テーブル1,クエリ6,
(select * from クエリ4 where クエリ4.結果='良')
where
テーブル1.ID = クエリ4.ID
and
クエリ4.番号 = クエリ6.番号
and
テーブル1.番号 in
(select テーブル1.番号 from テーブル1
where テーブル1.住所 like '薩%' or テーブル1.所属='凡人')
order by クエリ4.合計 desc
(解説) 複数のテーブル・クエリにおいて、サブクエリを行っている。
where に続く and の前後で、共通のフィールドを指定して、
関連付けをしている。 from の項目で、テーブル1,クエリ6,
および、クエリ4 の結果フィールドで '良' であるものから
検索し、select に続く該当のフィールドを表示する。

SQL その2 へ戻る. back top