演習30 「Msqry SQL」 の解説 その1


最初に データベース操作ソフト 'Msqry32' を、'Microsoft Office 2000'
の CD-ROM から次の手順でインストールする。

 Microsoft Office - 機能の追加/削除 - Office ツール - Microsoft Query

これで HDD 内の  C:\Microsoft Office\Office  フォルダ内に、自動的に
'Msqry32.exe' がインストールされる。

まず 参考として、演習26〜29 において、Access で作成した クエリ の SQL
を次に抜粋する。 これは、Access が自動的に作成したクエリを、SQLビュー
で眺めたものである。 演習30 の目的は、Access を起動せずに、'Msqry32'
のみを用いてクエリやテーブルの表示・修正・作成を行うことにある。(下記)


クエリ1:選択クエリ (所属フィールドに '討幕派' であるものを抽出)

 SELECT テーブル1.ID, テーブル1.番号, テーブル1.氏名, テーブル1.所属
 FROM テーブル1
 WHERE (((テーブル1.所属)="討幕派"));


クエリ2:選択クエリ (テーブル2を元に、演算フィールドに横計と判定)

 SELECT テーブル2.ID, テーブル2.番号, テーブル2.氏名, テーブル2.国語,
 テーブル2.社会, テーブル2.算数, テーブル2.理科, テーブル2.英語,
 IIf(IsNull([国語]), 0, [国語])+
 IIf(IsNull([社会]), 0, [社会])+
 IIf(IsNull([算数]), 0, [算数])+
 IIf(IsNull([理科]), 0, [理科])+
 IIf(IsNull([英語]), 0, [英語]) AS 合計,
 IIf([合計]>=300,"A",IIf([合計]>=200,"B","C")) AS 判定
 FROM テーブル2;

 (注) 演習28(a) の演算フィールドで使用した nz関数 は、Msqry32 で
     は認識されないので、このように IIf関数 によって書き換えた。


クエリ3:選択クエリ (テーブル2を元に、縦計と平均を関数計算)

 SELECT DISTINCTROW
 Sum([テーブル2].[国語]) AS [合計 の 国語],
 Avg([テーブル2].[国語]) AS [平均 の 国語],
 Sum([テーブル2].[社会]) AS [合計 の 社会],
 Avg([テーブル2].[社会]) AS [平均 の 社会],
 Sum([テーブル2].[算数]) AS [合計 の 算数],
 Avg([テーブル2].[算数]) AS [平均 の 算数],
 Sum([テーブル2].[理科]) AS [合計 の 理科],
 Avg([テーブル2].[理科]) AS [平均 の 理科],
 Sum([テーブル2].[英語]) AS [合計 の 英語],
 Avg([テーブル2].[英語]) AS [平均 の 英語]
 FROM テーブル2;


クエリ4:選択クエリ (各テーブルから必要なフィールドを結合)

 SELECT テーブル1.ID, テーブル1.番号, テーブル1.氏名,
        クエリ2.合計, クエリ2.判定,
        テーブル3.結果
 FROM (テーブル1 INNER JOIN クエリ2 ON テーブル1.ID = クエリ2.ID)
        INNER JOIN テーブル3 ON クエリ2.判定 = テーブル3.判定;

クエリ5:ユニオンクエリ (テーブル2の最下行に縦計を表示)

 table クエリ2
 UNION ALL
 select null, null, "縦計", Sum(テーブル2.国語), Sum(テーブル2.社会),
        Sum(テーブル2.算数), Sum(テーブル2.理科), Sum(テーブル2.英語),
        null, null
 from クエリ2
                                      bottom top


それでは、先ほど上でインストールした 'Msqry32' を起動する。 次の手順で
Access で事前に作成しておいた mdbファイル を読み込む。ここでは例として
データソースのファイル名を Access で作成した 'acctest2.mdb' としている。 

 Msqry32 - ファイル - SQLの実行 - データソース - MS Access Database -
  - OK - ファイルの種類「Accessデータベース」を確認 - データベース名 -
    - 'acctest2.mdb' を選択 - OK - SQLステートメント文を記入, または
                                   保存qrtファイルを開く

 
次に、SQLステートメント文の例を順を追って説明する。 例題は 次ページ に 続く。 (1) 全表示 (行列を全て表示) select * from テーブル1; (解説) select ... 表示    * ... 全ての行列を選択    from ... テーブル名を指定  
(2) 列表示 (氏名フィールドのみ全て表示) select 氏名 from テーブル1; (解説) select の次に列名を記入 (複数列の場合はカンマで区切る) (3) 条件抽出 (番号フィールドが '110' のレコードを抽出) select 氏名, ふりがな from テーブル1 where 番号=110; (解説) where ... 条件を設定 (4) 条件抽出 (所属フィールドに '幕' の字があるレコードを抽出) select ID, 氏名, 所属 from テーブル1 where 所属 like '%幕%'; (解説) like ... 条件の絞込み    % ... 任意の文字列 (5) 並び替え (合計フィールドを降順に表示) select * from テーブル1 order by 合計 desc; (解説) order by ... 並び替え    desc ... 降順に並び替え (昇順は asc) (6) 行修正 (番号フィールドが '110' のレコードを修正) update テーブル1 set 氏名='脇田美根夫', ふりがな='わきたみねお', キーワード='衛星通信' where 番号=110; (解説) update ... レコードの書き換え    set ... 修正フィールドを指定 (7) 行追加 (番号フィールドの '111' にレコードを追加) insert into テーブル1 values (11, 111, '佐藤好朗', 'さとうよしろう', '福島', '凡人', 'バイク'); (解説) insert into ... レコードを新規追加    values ( ) ... テーブルのフィールドに対応 (8) 行削除 (番号フィールドが '110' のレコードを削除) delete from テーブル1 where 番号=110; (解説) delete ... レコードを削除 (9) 新規テーブル作成 (テーブルを新規作成) create table テーブル4 (数値A integer not null, 数値B integer null, 文字C varchar(10) null); (解説) create table ... 新規に作成するテーブル名を設定    列名 データ型 null/not null の設定 SQL その2 へ移る.                            back top