演習30 「Msqry SQL」 の解説 その2
さらに続けて、'Msqry32' を用いて、Access で作成した テーブルやクエリ
の処理を行う。(データソースは、例として前頁と同じ acctest2.mdb である)
(10) グループ化 (住所フィールドでグループ化を行う)
     select 住所, count(*) from テーブル1 group by 住所;
     (解説) count(*) ... レコードの件数(行数) をカウントする集合関数
          group by ... 指定したフィールド(列)の中で同じ値を持つ行を
                       グループ化する。select に続く項目には ここで
                       指定したフィールドや count(*) 等を記述する。
     (注意) 今まで SQL文 の記述において、最後を意味するセミコロン(;)
          を付けていたが、'Msqry32' で集合関数 count(*) 等を扱う時
          は、セミコロンを省略すると、次図左のようにフィールド列に
          具体的な名前が自動的に付くので、今後そのようにする場合が
          ある。
      
  
(11) グループ化 (union クエリで最下行に合計を表記する)
     select 住所, count(*) from テーブル1 group by 住所
     union all
     select '人数合計', count(*) from テーブル1
     (解説) union ... 前後の select 文の結果の和集合をとる。
      
(12) グループ化 (having で条件をつけて絞り込む)
     select 住所, count(*) from テーブル1 group by 住所 having count(*) >= 2
     (解説) having ... グループ化した結果から条件を付けて抽出する。
      
(13) 結合 (二つのテーブルを結合して一つのテーブルを作る)
     select テーブル1.ID, 
            テーブル1.番号, 
            テーブル1.氏名, 
            クエリ2.合計, 
            クエリ2.判定
       from テーブル1 inner join クエリ2
         on テーブル1.ID = クエリ2.ID
     (解説) 基本形は、
          select * from テーブルA inner join テーブルB
          on テーブルA.列a = テーブルB.列a
          inner join ... 前後のテーブルを結合する。
          on □ = □ ... 各々のテーブルで値が等しい共通する列
                       (主キー) を指定して関連付ける。
      
(14) 結合 (三つのテーブルを結合して一つのテーブルを作る)
     select テーブル1.ID, 
            テーブル1.番号, 
            テーブル1.氏名, 
            クエリ2.合計, 
            クエリ2.判定,
            テーブル3.結果
      from (テーブル1 inner join クエリ2 on テーブル1.ID = クエリ2.ID)
      inner join テーブル3 on クエリ2.判定 = テーブル3.判定
     (解説) 基本形は、
          select * from
          (テーブルA inner join テーブルB on テーブルA.列a = テーブルB.列a)
          inner join テーブルC on テーブルB.列b = テーブルC.列b
          括弧でくくられた部分の テーブルA とテーブルB の結合を一つの
          テーブルと考え、新たにテーブルC を結合している。
      
 SQL その1 へ戻る.
 SQL その3 へ移る.                            back top