
[PocketCafe トップ] [Pocketに書斎][Pocket日記] [Mail]
Pocket AccessでSQLを使う
-SQLもサブセット-
作成日 01/07/01
とりあえず、SQLプロシージャの、「飲料在庫」をダブルクリックしてみます。SQL実行結果が、表示されます。
「飲料在庫」のSQL文は、次のようになっています、と云いたいところなんですが、ちょっと気に入らなかったので、FROM句、INNER JOIN句の部分を書き直しています。
SELECT 商品.商品コード, 商品.商品名, 商品.在庫, 商品.単価, 商品.梱包単位
FROM 商品 INNER JOIN 商品区分 ON 商品.区分コード = 商品区分.区分コード
WHERE (((商品.在庫)>0) AND ((商品区分.区分名)="飲料"))
ORDER BY 商品.商品コード;
では、順を追って説明していきましょう。なお、文中のリファレンスは、PocketAccessのヘルプから引用しています。
まず、「商品」テーブルを見てください。

「商品」テーブルには、全商品が載っています。ここから、次の条件で、レコードを抽出してみたいと思います。
◆まずテーブルと、表示するフィールドを指定する
SELECT fieldlist
FROM tablename
SELECT 商品.商品コード, 商品.商品名, 商品.在庫, 商品.単価, 商品.梱包単位
FROM 商品
◆テーブルを結合する
「商品」テーブルをよく見ますと、商品区分のコードは持っていますが、区分名は持っていません。リレーショナル・データベースの考え方の基本は、重複する内容は個別のテーブルに持たせないことです。だから、商品名と一緒に商品区分名もほしい場合、「商品名」テーブルに「商品区分」テーブルを結合し、「商品区分」テーブルから区分名を持ってくるようにします。

SELECT fieldlist
FROM table1 INNER JOIN table2
ON table1.field1 = table2.field1
[(] INNER JOIN table2
ON table1.field2 = table2.field2[)] ...
SELECT 商品.商品コード, 商品.商品名, 商品.在庫, 商品.単価, 商品.梱包単位
FROM 商品 INNER JOIN 商品区分 ON 商品.区分コード = 商品区分.区分コード
◆条件を指定する
条件指定には、WHERE句を使います。「在庫がある」というのは、「在庫数>0」です。そして、商品区分が「飲料」のくだりは、先のINNER JOINと組み合わせて使います。エクセル知っている人。単刀直入に云います。VLOOKUP関数と似たようなものです。つまり、区分コードを基に、区分名を取得しているわけです。
SELECT 商品.商品コード, 商品.商品名, 商品.在庫, 商品.単価, 商品.梱包単位
FROM 商品 INNER JOIN 商品区分 ON 商品.区分コード = 商品区分.区分コード
WHERE (((商品.在庫)>0) AND ((商品区分.区分名)="飲料"))
SELECT fieldlist
FROM tablename
WHERE criteria [AND | OR criteria]
◆並び替える
並び替えには、ORDER BY句を使います。昇順(ASC)、降順(DESC)を指定できます。指定がなかった場合、デフォルトで昇順が使用されます。
SELECT 商品.商品コード, 商品.商品名, 商品.在庫, 商品.単価, 商品.梱包単位
FROM 商品 INNER JOIN 商品区分 ON 商品.区分コード = 商品区分.区分コード
WHERE (((商品.在庫)>0) AND ((商品区分.区分名)="飲料"))
ORDER BY 商品.商品コード;
SELECT fieldlist
FROM tablename
ORDER BY fieldname [ASC | DESC][, fieldname2 [ASC | DESC], ...]
◆最後に
とりあえず、一通りのことは話したと思います。逆に、これ以上複雑な処理は、PocketAccessでせずに母艦のアクセスでやった方が効率がいいかと思います。出先でさくっとやろうと思えば、なるべく処理も軽くしておいた方がいいですしね。