[PocketCafe トップ] [Pocketに書斎][Pocket日記] [Mail]

Pocket AccessでSQLを使う

-SQLもサブセット-

作成日 01/07/01

少し間が空きましたが、PocketAccess第二弾です。前回は、PC版のアクセスでクエリーを作成し、それをSQLビューで表示することでSQLステートメントを取得できるという裏技を記しました。
今回は、PocketAccessだけでSQL文を書けるように、SQLの基礎的なことをお話ししたいと思います。PocketCafeを見ていただいている方には、実際にH/PCをビジネスでご使用されている方が多いのですが、ちょっとした援護射撃になればいいなと思います。

今回使うのも、Access97に付属のNorthwind.mdbをCEに持ってきたものです。
テーブル・ビュー

とりあえず、SQLプロシージャの、「飲料在庫」をダブルクリックしてみます。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]

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でせずに母艦のアクセスでやった方が効率がいいかと思います。出先でさくっとやろうと思えば、なるべく処理も軽くしておいた方がいいですしね。

[戻る]




[PR]≪占い奇跡の恋愛術≫初回無料:幸せな結婚へ導きます。本格結婚鑑定