So-net無料ブログ作成
検索選択
Accessクエリ ブログトップ
前の10件 | -

AccessクエリとSQLの関係 抽出条件(表示のチェックボックス) [Accessクエリ]



表示のチェック

今回は、Access抽出条件の残りである、表示のチェックボックスの解説をしたい。

このチェックボックスにチェックを入れておくと、SELECT句に含まれるようになる。SELECT句に含まれる式のみが、実行結果として表示される。
なので、チェックが入っていない式は、実行結果に表示されない。
このような、SELECT句に含まれず、実行結果に表示されない式に、なにか意味があるかという素朴な疑問が持ち上がる。

不要なものは削除してしまえばよいだけでは?と思ってしまうのであるが、このチェックボックスがあることでけっこう柔軟にクエリが書けてしまうのである。

抽出条件だけ書きたい場合

結果としては、欲しくないが、抽出条件だけは付けたい、という場合は以下のようにできる。

Access表示のチェックを付けない 2017-06-01 (3).png

そう、欲しいのは商品名だけなのだが、検索は商品コードでやりたい、という場合。
まぁ、この場合は商品コードにチェックが入っていても余計な商品コードも表示されてしまうだけなので、別にどっちでも大差ないと思うが...

商品マスタテーブルは「MS Access ルックアップフィールド」で作成したもの。

並び替えの条件を複数書きたい場合

並び替えの条件を複数書きたいとする。注文テーブルのレコードを商品の順で、注文日が新しいもの順にソートしたいとする。並び替えの条件は、商品が昇順で、注文日が降順になるのだが、最初に商品で並び替えて、次に注文日で並び替えることができない。

Access複数列でソート2017-06-01 (7).png

並び替えの順序は、デザインビューで表示されている順になるからである。
そこで、非表示の列を作ってやる、ということをする。

Access複数列でソート2017-06-01 (10).png

これで、期待通りに並び替えできた。

まぁ、これも「商品」「注文日」の順になるように入れ替えればいいだけかも知れないが...

今回はここまで。
詳しくは、SQLポケリを参照して欲しいのだ。


[改訂第4版]SQLポケットリファレンス

[改訂第4版]SQLポケットリファレンス

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2017/02/18
  • メディア: 単行本(ソフトカバー)



関連記事
AccessクエリとSQLの関係 デザインビューとSQLビュー
AccessクエリとSQLの関係 フィールド
AccessクエリとSQLの関係 フィールドに式を書く
AccessクエリとSQLの関係 並び替え
AccessクエリとSQLの関係 抽出条件
AccessクエリとSQLの関係 抽出条件(または)
AccessクエリとSQLの関係 抽出条件(INとLIKE)
AccessクエリとSQLの関係 抽出条件(表示のチェックボックス)



サイト内を検索


nice!(0)  コメント(0) 
共通テーマ:携帯コンテンツ

AccessクエリとSQLの関係 抽出条件(INとLIKE) [Accessクエリ]



さて、Accessクエリの続きである。

今回は、前回に続いて、またもや抽出条件である。
ORやANDを抽出条件に書いてみたわけであるが、IN(イン)を紹介していなかったので、ここで解説するのである。

IN 入っているか?

さて、抽出条件とその下の「または」の入力欄には、抽出条件の式を書くことができた。デフォルトで9個の条件を記入することができる。
抽出条件の欄に、Orで連結することでも同じ効果となる条件式になるので、「1 Or 2 Or 3 Or 4」とか書いていけば、長さの制限に引っかかるまでいくらでも条件を追加することができる。

INを使うとこのような条件式を簡潔に記述できる。

IN (1,2,3,4)

とすればOKなのだ。
SQLビューにしても、そのままIN (1,2,3,4)となるだけなので、SQL命令の画面キャプチャは省略。一応、全体を載せておく。

SELECT foo.a, foo.b
FROM foo
WHERE (((foo.b) In (1,2,3,4)));


ここまでのまとめ

IN
 複数の値のうち、どれかと一致すればOKなとき、IN演算子を使うと便利。

INの括弧の中には、サブクエリーを書くことができるのだがこれは、少々高度な話になってくるので、また後日ということにする。

LIKE あいまい検索 パターンマッチング

ついでながら、部分一致で検索したい場合の抽出条件の書き方についても、解説しておく。
パターンマッチングで、あいまい検索をしたい場合は、「LIKE」を使えばよい。

LIKE '*A*'

とすればa列の値の中にAが含まれているレコードが抽出される。
*の部分は、なんでもOKな、いわゆるワイルドカードである。
SQL標準では、%が相当するメタ文字になるが、Accessでは、*を使った方がよい。
というか、%が使える状況が限定的。

メタ文字の?を使用することで、1文字のワイルドカードになる。

さらには、[A-F] のようにすれば、Aから順にFまでの 「A B C D E F」のいずれか1文字といったワイルドカードにできる。

AccessLIKE 2017-06-01.png

SELECT foo.a, foo.b
FROM foo
WHERE (((foo.a) Like '*A*')));


SQLでのLIKEは、正規表現とは異なったパターン指定となる。Accessにおいては正規表現的な要素があるが、微妙に異なる。また、SQLiteのREGEXPのような正規表現でのパターン検索用の演算子は存在しない。

正規表現自体は、「Microsoft VBScript Regular Expression 5.5」を参照設定すれば、RegExpオブジェクトが利用可能になる。RegExpオブジェクトを使って正規表現を処理するような、自前のVBA関数を作ってやれば、クエリから正規表現によるマッチング検索をできなくもない。

ここまでのまとめ

LIKE
 パターンマッチングによるあいまい検索。


今回はここまで。
詳しくは、SQLポケリのIN演算子、LIKE演算子のところを参照して欲しいのだ。


[改訂第4版]SQLポケットリファレンス

[改訂第4版]SQLポケットリファレンス

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2017/02/18
  • メディア: 単行本(ソフトカバー)



関連記事
AccessクエリとSQLの関係 デザインビューとSQLビュー
AccessクエリとSQLの関係 フィールド
AccessクエリとSQLの関係 フィールドに式を書く
AccessクエリとSQLの関係 並び替え
AccessクエリとSQLの関係 抽出条件
AccessクエリとSQLの関係 抽出条件(または)
AccessクエリとSQLの関係 抽出条件(INとLIKE)
AccessクエリとSQLの関係 抽出条件(表示のチェックボックス)




サイト内を検索


nice!(0)  コメント(0) 
共通テーマ:携帯コンテンツ

AccessクエリとSQLの関係 抽出条件(または) [Accessクエリ]



さて、Accessクエリの続きである。

今回は、前回に続いて、抽出条件である。
抽出条件のひとつ下に、「または」っていうのがある。以下、見出しに何も書かれていない入力欄が存在するが、こいつらの効果を調べるのである。

抽出条件または

さて、抽出条件の入力欄には、抽出条件の式を書くことができた。そのひとつ下にある「または」の部分にも抽出条件を書き込むことができる。
どちらかの抽出条件に合致するレコードが抽出されることになる。

以下のように、2と3を入力すると
b列が2であるレコード「または」b列が3であるレコードが抽出される。

Access抽出条件2または32017-05-29 (14).png

簡単にいえば、条件式を複数書くことができるわけです。
で、それらの条件式のうちどれかに合致すれば抽出対象となるわけです。

SQLとの対比 OR

では、これをSQLビューで表示させてみよう。

Access抽出条件OR2017-05-29 (14).png

これまた、括弧が多いので、取り除いてみると

WHERE foo.b = 2 OR foo.b = 3

となる。
foo.b = 2 が「b列が2であるレコード」という条件。
foo.b = 3 が「b列が3であるレコード」という条件。
これらのふたつの条件式が、OR(オア)でつながれている。

このORは、左右の条件式のうち、どちらか一方の条件が成り立っていれば、全体として真を戻す演算子。両方の条件が成り立っている場合でも真になる。唯一、偽となるのは、両方の条件が成り立っていない場合のみとなる。
ORは英語であるが、日本語に訳すと「または」である。

ここまでのまとめ

OR
 「または」に入力すると、ORで連結された条件式となる。


抽出条件にORを書く

またはの入力欄に条件式を書いたが、これをOrを使って、抽出条件のところにまとめて書いてもよい。

Access抽出条件にOrを書く2017-05-29 (17).png

実行結果やSQLは「または」に3を書いた場合と同じになるので、省略。

この方法なら、Or以外の論理演算子で条件を連結することも可能になる。
論理演算子には、以下のものが存在する(代表的なもののみ)。

論理演算子
 OR  または
 AND かつ
 IN  いずれか

ORについては、これまで見てきた通りであるが、AND(アンド)については少々説明が必要かも。
ANDもORと同様に、ふたつの条件式を連結するものである。ORが片方の条件式が成り立っていればよかったのに対して、ANDでは、両方の条件式が成り立っていなければ、全体で真にならない。

なので、「2 Or 3」をそのまま「2 And 3」としてもうまくいかないであろう。

どうしてかといえば、b列の値が2であり、かつ、同時にb列の値が3であるレコードなんて存在しないからである。

しかしながら、文法としては正しいので、Accessは律儀にそういったレコードを検索する。探しても存在しないはずなんだけどね。

ではANDの意味がないじゃない、と思われるかも知れない。

まぁ、ひとつの列の抽出条件に等価である条件同士でAND書いても「意味ない」です。

複数の列に抽出条件を書く

a列のところにも抽出条件を書いてみよう。
これで、SQLビューにしてみると

Access抽出条件AND2017-05-29 (18).png

ほほう。「a列が"二"」という条件と「b列が2」という条件のふたつがANDで連結されている。
これなら意味がある。どちらの条件も満たしているレコードが抽出されるのである。

ここまでのまとめ

AND
 デザインビューの各列に抽出条件を書くと、ANDで連結された条件式となる。

範囲指定の抽出条件

ひとつの列で抽出条件にANDを書いてもあまり意味がない、といったが、範囲指定で条件を書くときにはAndを使って書くことが多い。ANDを使って意味がないのは等しいかどうかの条件式を連結する場合である。
例えば、b列の値が、1~3の範囲にある、といった条件式なら以下のように書くことができる。

 >=1 And <=3
  または
 Between 1 And 3

今回はここまで。
詳しくは、SQLポケリのWHERE句や論理演算子のところを参照して欲しいのだ。


[改訂第4版]SQLポケットリファレンス

[改訂第4版]SQLポケットリファレンス

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2017/02/18
  • メディア: 単行本(ソフトカバー)



関連記事
AccessクエリとSQLの関係 デザインビューとSQLビュー
AccessクエリとSQLの関係 フィールド
AccessクエリとSQLの関係 フィールドに式を書く
AccessクエリとSQLの関係 並び替え
AccessクエリとSQLの関係 抽出条件
AccessクエリとSQLの関係 抽出条件(または)
AccessクエリとSQLの関係 抽出条件(INとLIKE)
AccessクエリとSQLの関係 抽出条件(表示のチェックボックス)




サイト内を検索


nice!(0)  コメント(0) 
共通テーマ:携帯コンテンツ

AccessクエリとSQLの関係 抽出条件 [Accessクエリ]



さて、Accessクエリの続きである。

前回は、並び替えをやった、今回は、ひとつ飛ばして、抽出条件をやってみる。
多分、クエリで一番お世話になる機能である。

抽出条件

さて、抽出条件の入力欄では、ドロップダウンは表示されない。これは、なんでも入力できることを意味する。抽出条件という言葉の意味通り、抽出するための条件を書き込む欄になる。

まずは、簡単な抽出からやってみることにする。

単純一致

抽出という処理は、レコードを抽出する作業になる。抽出条件は、抽出したいレコードの条件。
抽出条件に単に値を入力すると、その値と一致するレコードが抽出される。
難しくはない。
fooテーブルの全レコードが以下のように存在していたとする。
b列の抽出条件に2を書き込んでクエリを実行すると

Access抽出条件を設定2017-05-29 (8).png

b列が2であるレコードだけが抽出された。
2を1に変更すれば、1であるレコードが抽出されるはず。

SQLとの対比 WHERE

では、これをSQLビューで表示させてみよう。

Access抽出条件を設定SQL2017-05-29 (8).png

やたら括弧が付いて読みにくいが、WHERE(ホエア)が追加になっていることがわかる。括弧を取り除いてみると、以下のようになっている。

WHERE foo.b = 2

SELECT命令のWHERE句では、レコードを抽出するための条件式を書くところなのである。テーブルfooのb列が2と一致するレコードだけを抽出してきなさい、という命令になっている。

「foo.b = 2」は、式である。foo.bがテーブルfooのb列であることを意味している。2はそのまま数値の2。=が演算子で「等しい」かどうかを計算してくれるもの。デザインビューの入力欄には=は入力していないが、計算方法を入力しなかった場合、デフォルトで=が演算子として採用される。

ここまでのまとめ

WHERE
 抽出条件を指定するとSELECT命令に追加される

foo.b = 2
 WHEREに続けて、レコードの抽出条件式を指定する

=
 等しいかどうかを計算する演算子


比較演算

単純にb列の値が2と一致するレコードだけを抽出できた。演算子を指定することで、計算方法を変更することができる。比較演算子を使うことで、指定した値よりも大きいものだけ、といった抽出が可能になる。比較演算子には以下のものがある。

 =  等しい
 >  大きい
 <  小さい
 >= 以上
 <= 以下
 <> 等しくない

このブログは、HTMLで書いているので、記号を全角文字で書いている。実際のクエリには半角で演算子を書かないと演算子とはみなされないので注意!

b列が2以上であるレコードを抽出してみよう。

Access抽出条件2以上2017-05-29 (11).png

ちゃんとできました。
今回はここまで。
詳しくは、SQLポケリのWHERE句や比較演算子のところを参照して欲しいのだ。


[改訂第4版]SQLポケットリファレンス

[改訂第4版]SQLポケットリファレンス

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2017/02/18
  • メディア: 単行本(ソフトカバー)



関連記事
AccessクエリとSQLの関係 デザインビューとSQLビュー
AccessクエリとSQLの関係 フィールド
AccessクエリとSQLの関係 フィールドに式を書く
AccessクエリとSQLの関係 並び替え
AccessクエリとSQLの関係 抽出条件
AccessクエリとSQLの関係 抽出条件(または)
AccessクエリとSQLの関係 抽出条件(INとLIKE)
AccessクエリとSQLの関係 抽出条件(表示のチェックボックス)





サイト内を検索


nice!(0)  コメント(0) 
共通テーマ:携帯コンテンツ

AccessクエリとSQLの関係 並び替え [Accessクエリ]



さて、Accessクエリの続きである。

本日は、フィールドの下にある、並べ替えについてやってみる。フィールドのすぐ下にはテーブルの入力欄もあるが、元となるテーブルが複数になってこないと意味がないので、後回しとする。

さて、並び替えをやるとどうなるのか、何が並び替えられるのかやってみることにする。

並び替え

さて、並べ替えのところをドロップダウンさせてみると、「昇順」「降順」「(並べ替えなし)」と3つの選択肢が存在することがわかる。
並べ替えなしがデフォルトの状態。何も指定していない状態であるので、並び替えは行われない。

テーブルfooの作成方法が良くなかった。a列で並び替えするとわかりにくいので、b列で並び替えをしてみよう。
フィールドを式にしてしまったので、これを単純にb列だけにする。さらに、並び替えで、昇順を指定してみた。

Access並べ替えb列昇順2017-05-29 (1).png

これで、「実行」してデータシートビューに切り替えると、b列が小さいものから大きいものへ順番に並び替えられて表示される。
Excelでいうと、B列を選択して、「並べ替えとフィルター」の「昇順」を実行した感じとなる。

Accessb列で並び替えられた2017-05-29 (5).png


降順で並び替え

元々1,2,3の順番でレコードを作成したので、並び替えなくても結果は同じであったので面白くない。「降順」に変更して、並び替えの様子を見てみよう。

Access並び替えb列降順2017-05-29 (3).png

確かに、並び替えられている。

並び替えられるのは、「レコード単位」である。b列に並び替えの条件を指定したが、b列のみが並び替えられるわけではない。従って、a列とb列の対応が崩れることはない。Excelの並び替えでも、同じように行単位で並び替えされるので違和感はないと思う。


SQLとの対比 ORDER BY

SQLビューに切り替えてみよう。

Access並び替えORDER BY 2017-05-29 (3).png

ORDER BY ...といった命令文が追加されている。読み方は、「オーダーバイ」である。ORDER BY句により並び替えを指定することができる。
ORDER BYに続けて、どの列をキーとして並び替えるのかが指定されている。例では、b列で並び替えしているので、ORDER BY foo.bと書かれている。
さらに、降順を指定しているので、DESC(デスク)が付いている。昇順に変更すると、DESCがなくなる。
最後の;(セミコロン)は、SELECT命令文の終わりを意味するもの。

まとめ

ORDER BY
 並び替えを指定するとSELECT命令に追加される

foo.b
 ORDER BYに続けて、並び替えを行いたい列を指定する

DESC
 降順で並び替えを行う指定。昇順で並び替える場合はブランクまたは、ASCを指定できる。

今回はここまで。
詳しくは、SQLポケリを参照して欲しいのだ。


[改訂第4版]SQLポケットリファレンス

[改訂第4版]SQLポケットリファレンス

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2017/02/18
  • メディア: 単行本(ソフトカバー)



関連記事
AccessクエリとSQLの関係 デザインビューとSQLビュー
AccessクエリとSQLの関係 フィールド
AccessクエリとSQLの関係 フィールドに式を書く
AccessクエリとSQLの関係 並び替え
AccessクエリとSQLの関係 抽出条件
AccessクエリとSQLの関係 抽出条件(または)
AccessクエリとSQLの関係 抽出条件(INとLIKE)
AccessクエリとSQLの関係 抽出条件(表示のチェックボックス)






サイト内を検索


nice!(0)  コメント(0) 
共通テーマ:携帯コンテンツ

AccessクエリとSQLの関係 フィールドに式を書く [Accessクエリ]



さて、Accessクエリの続きである。

前回は、抽出条件のところで、フィールドを指定をしてみた。
SELECT命令のSELECT句に列名をカンマで区切ってかけば抽出するフィールドを指定することができた。

今回は、フィールドに式を入れてみたいと思う。

フィールドに式を書く

フィールドには列名だけでなく、列名を加工するような式を書くことができる。よくやるのは、単価*個数で金額を計算する、なんていうことです。
やることは単純。フィールドのところに、計算式を書き込めばよい。

b列の倍を計算するように、2列目を変更してみた。

Accessbx2に変更2017-05-26 (18).png

フィールドの入力フォーカスを矢印キーで移動して外すと、自動的に表示方法が変更される。

式1: [b]*2

となった。
なんで勝手にかわっちゃうのよ、と思うのだが、これにはいろいろ事情がある。

Access勝手に変わった2017-05-26 (19).png

式1:の正体

式1:は、Accessがそのフィールドに勝手に付けた名前である。列を指定した場合は、それが名前であるため、Accessはフィールド名として列名をそのまま使用する。計算式にすると、名前とはいいがたくなる。現に記号である「*」を使用しているので、名前としては認められない。
SQLでは、*などの記号は名前に使用できない。

SQLビュー、データシートビューに切り替えてみてみると以下のような対応となっていることがわかる。

Access別名とAS2017-05-26 (19).png

式1は、計算式「[b] * 2」に付けられた名前である。
SQLでは、SELECT句の各列に対して、ASキーワードで別名を指定できる。別名なんです。Accessのデザインビューでは、「別名:計算式」といった書式となる。
なので、列名だけのフィールドに対しても別名を付けることが可能。

別名:a

とかしてみたらわかります。

[ ] の正体

記号は使ってはいけないのか、では[と]は?使っても良いのか?

はい、[ と ] は名前のうちに入らない。列名はあくまでbだけで、bが列名であることを正確に表記したいがために、[と]で囲んでやる。
文字列を表現するのに、"で囲む、っていうことをやるでしょ?C言語とかで。SQLでも文字列は'で囲んでやる。囲まれた中のデータが実際のデータで、囲んでいる記号はデータには含まれない。


詳しくは、SQLポケリを参照して欲しいのだ。


[改訂第4版]SQLポケットリファレンス

[改訂第4版]SQLポケットリファレンス

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2017/02/18
  • メディア: 単行本(ソフトカバー)



関連記事
AccessクエリとSQLの関係 デザインビューとSQLビュー
AccessクエリとSQLの関係 フィールド
AccessクエリとSQLの関係 フィールドに式を書く
AccessクエリとSQLの関係 並び替え
AccessクエリとSQLの関係 抽出条件
AccessクエリとSQLの関係 抽出条件(または)
AccessクエリとSQLの関係 抽出条件(INとLIKE)
AccessクエリとSQLの関係 抽出条件(表示のチェックボックス)





サイト内を検索


nice!(1)  コメント(0) 
共通テーマ:携帯コンテンツ

AccessクエリとSQLの関係 フィールド [Accessクエリ]



さて、Accessクエリの続きである。

前回は、クエリのデザインビューをざっくりと説明した。
上部がテーブルを指定する場所で、SELECT命令のFROM句にあたる。
下部が抽出条件などを指定する場所で、今のところテーブルfooの全列を指定しているだけとなっており、こらはSELECT命令のSELECT句にあたる。

というところまでやった。
今回は、デザインビューの下部にいろいろ条件を入れてみたいと思う。

フィールドで列指定

まずは、テーブルfooの全列ではなく、a列だけを取得してみよう。テーブルfooにはaとbのふたつの列を定義しているが、b列は見なくてよいので、a列だけにしたいのである。

どうすればよいかというと、フィールドのところをfoo.*からaに変更するだけである。

フィールドの横に表示される▽のところをクリックすれば、ドロップダウンでリストが表示される。このリストは、上部に追加されているテーブルのフィールドが列挙されている。リストの中からaを選択してもよいし、aを入力してもよい。

Access a列に変更2017-05-26 (7).png

この状態で、クエリを実行すると、データシートビューになる。指定したaのフィールドだけが表示される。

SQLとの対比

フィールドの条件を変更したらSQLではどうなっているのかを見てみよう。

Accessフィールドa列のみ2017-05-26 (14).png

しっかりとSELECT句が変更されている。


取得列を追加してみる

b列も追加してみることにしよう。
上部にはテーブルfooが表示されているが、fooの中に列がリストされていることがわかる。このリストからbをクリックして、そのまま空いているフィールドのところまでドラッグしてみよう。
ドラッグ操作でもフィールドを追加することができる。

Accessドラッグで列を追加2017-05-26 (15).png

SELECT句にもb列が追加されている。SELECT句では、複数の列を取得する場合は、カンマで区切って指定する。

AccessSQLビュー2017-05-26 (16).png

拡大してみたが、文字が小さくて判別不可能ではないか。fooとbの間には.が入っている。foo.bでテーブルfooのb列という意味になる。

詳しくは、SQLポケリを参照して欲しいのだ。


[改訂第4版]SQLポケットリファレンス

[改訂第4版]SQLポケットリファレンス

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2017/02/18
  • メディア: 単行本(ソフトカバー)



関連記事
AccessクエリとSQLの関係 デザインビューとSQLビュー
AccessクエリとSQLの関係 フィールド
AccessクエリとSQLの関係 フィールドに式を書く
AccessクエリとSQLの関係 並び替え
AccessクエリとSQLの関係 抽出条件
AccessクエリとSQLの関係 抽出条件(または)
AccessクエリとSQLの関係 抽出条件(INとLIKE)
AccessクエリとSQLの関係 抽出条件(表示のチェックボックス)




サイト内を検索


nice!(0)  コメント(0) 
共通テーマ:携帯コンテンツ

AccessクエリとSQLの関係 デザインビューとSQLビュー [Accessクエリ]



Accessに対して、SQL ServerやOracleなどは"本格的な"データベースという位置付けで説明されることが多い。
自分でもこのフレーズを何回となく、書いてきたかも知れない。

そんなことを言われると、Accessは本格的じゃなくて、亜流なのか、と思ってしまうが、Accessだってちゃんとしたリレーショナルデータベースである。
クエリデザイナでSQLを知らなくてもチョチョイとクエリを作れてしまう。とても「お手軽」な感じなので、格式ある伝統的手法ではないやり方でデータベースを使っているから、「本格的ではない」になるのかしら。

SQLを知らない人でもデータベースを扱えるように作られたAccessは、亜流だけど"すごい"、っていうことになるのかも。
それに、Accessだって、SQLビューにすれば、正式な作法であるSQLで「本格的なデータベース操作をできる」っていうことにならないか?

そういうわけ(どういうわけ?)でAccessクエリとSQLの対応がどうなっているのかをちょっと調べてみることにした。

ビューの切り替え

まずは、基本的なことから。
Accessのクエリは3種類の表示が可能である。表示形態は「ビュー」と呼ばれており、以下のものが存在する。

 1 デザインビュー
 2 データシートビュー
 3 SQLビュー

これらのビューは、ツールバーの[表示]ボタンで切り替えられる。
ステータスバーでも切替られる。

1 デザインビュー
これが、SQLを知らない人がクエリを作成するときのデフォルトのビュー(表示形式)であろう。

Accessデザインビュー.png

2 データシートビュー
データを入力するときは、この表示形式を使うことになる。クエリを実行した結果でもある。

Accessデータシートビュー.png

3 SQLビュー
クエリの命令をSQL言語で表示するビューである。デザインビューで作成したクエリの内容と同等なSQL命令が表示される。

AccessSQLビュー.png

概念的には、1と3は同一の「クエリ定義情報」を異なる形で見せているだけで、実体としては同じ、と思って良い。
2は、クエリの定義と実行結果という決定的な違いがある。1と3は、クエリの定義を表示しているが、2は、クエリを実行した後の検索されたレコード情報を表示している。なので、デザインビューまたはSQLビューを表示している状態で「実行」ボタンをクリックするとデータシートビューに切り替わる。

Accessクエリビューの切り替え.png

この点が大きく異なるので、2のデータシートビューは対比するのに紛らわしいので、今後あまり話題にはならないかも。

デザインビュー

デザインビューをよく見ていくことにする。
まずは、大きく上下ふたつにわかられていることがわかる。

上部分

デザインビューの上半分には、テーブルまたはクエリを追加することができる。ここに表示されているオブジェクトからデータを検索してくることになる。
例では、テーブルfooのひとつだけが存在している。
クエリを作成する際に、テーブル、クエリを選択するダイアログが表示される。ここでfooを選択してクエリを作成したので、クエリ1にはテーブルfooが含まれているかたちとなっている。

SQLとの対比

クエリ全体は、ひとつのSELECT命令に相当する。上半分では、どのテーブルからデータを引っ張ってくるかの指定になるので、SQLでいうと、SELECT命令のFROM句に相当する。

SQLビューにしたときのSELECT命令を見てみると...

SELECT foo.*
FROM foo;

となっている。「FROM foo」のところがデザインビューの上半分に表示されている、と理解して欲しい。

Accessデザインビューの上半分.png

下半分

下半分は、クエリの抽出条件を設定するエリアとなる。
テーブルのどのフィールド(列)を取ってくるのか、はたまた、レコードの抽出はどういった条件とするのかを設定していく。
例では、条件らしいものは設定せず、fooテーブルのすべてを取ってきてね、といったルーズな設定にしている。

SQLとの対比

デザインビューの下半分は、SELECT命令のいろいろなところに反映されることになる。今現在は、foo.*しか設定していないので、SELECT命令のSELECT句だけが指定されている状態である。

Accessデザインビュー下半分.png

本日のところは、以上とする。
以降、抽出条件の詳細を追ってみることにする。

関連記事
AccessクエリとSQLの関係 デザインビューとSQLビュー
AccessクエリとSQLの関係 フィールド
AccessクエリとSQLの関係 フィールドに式を書く
AccessクエリとSQLの関係 並び替え
AccessクエリとSQLの関係 抽出条件
AccessクエリとSQLの関係 抽出条件(または)
AccessクエリとSQLの関係 抽出条件(INとLIKE)
AccessクエリとSQLの関係 抽出条件(表示のチェックボックス)


サイト内を検索


nice!(0)  コメント(0) 
共通テーマ:携帯コンテンツ

MS Access VBAプロシージャの呼び出し [Accessクエリ]



今回は、VBAプロシージャをMS Accessのクエリから呼び出してみるのである。
SQLポケリでは、AccessではCREATE PROCEDUREやCREATE FUNCTIONは使えないことになっている。このことに間違いはないのだが、ストアドプロシージャが使用できないかのような誤解を招いているようなので、本ブログで訂正したいのである。

そもそも

Accessは、Office製品のひとつなので、VBAが使用できる。VBAはVisual Basic for Applicationだったかしら。Visual Basic言語でOfficeアプリケーションでの業務を自動化するようなプログラムを作成できます。っていうのがVBAのウリなわけです。

SQLは、リレーショナルデータベースへの命令が可能な言語である。Accessはもちろんのこと、SQL ServerやOracleといった大規模システム用のデータベースでも使用できる。
SQLの特徴として「非手続き型言語である」というものがある。一般的なプログラミング言語は、手続き型である。VBAも手続き型言語である。いくつものステートメントが順番に実行されていき、すべての手続きが終了しないと、処理が終了しない。
SQLでは、ひとつのステートメント(命令文)で1回の処理は終了するようにできている。
また、SQLの基本命令には、一般的な手続き型のプログラミング言語には"必ず"と言ってよいほど存在する、IF文のような場合分けの命令や、WHILE文のような繰り返し処理を行う命令文が存在しない。

ムズカシイ話になってきてしまった。簡単にいってしまえば、

SQL基本命令の特徴
 非手続き型
 1ステートメントで1処理が完結
 IFやFORなどの制御命令がない

ということなのである。

SQL拡張命令

SQLの基本命令には、IFやWHILEが存在しないのであるが、拡張命令には存在する。データベースベンダが各社の製品をより使いやすくするために、言語の拡張を行ってきた結果である。
SQL Serverでは、TransactSQLと呼ばれる拡張されたSQLが使用できる。Oracleでは、PL/SQLと呼ばれるものがある。どちらもIFやWHILEといった制御命令が使用できる。

でもって、Accessはどうかというと、もともとVBAやマクロでユーザが機能を拡張できるようになっていたので、わざわざ新しくSQLを拡張しなくても"いいじゃん"的な発想であったのであろう。SQLを拡張することでデータベースエンジンを複雑にするよりも、既存のVBAというしくみを使って、なんとかやりくりしてしまおう、という道を選んだのである。

ストアドプロシージャ

ストアドプロシージャとファンクションは、データベースの中に作成されるプロシージャやファンクションのことである。
SQL基本命令ではなく、SQL拡張命令に分類される。

SQL ServerやOracleでは、CREATE PROCEDUREでプロシージャを作成できるし、CREATE FUNCTIONでファンクションを作成できる。処理の内容は、拡張されたSQL命令で記述する。SQLの基本命令から作成したプロシージャやファンクションを呼び出すことが可能である。

Accessではというと、CREATE PROCEDURE、CREATE FUNCTIONを使用することができない。しかし、VBA Editorを使ってPublic Functionを作成しておけば、SQLからVBAのファンクションを呼び出すことが可能である。

ちょっと作ってみよう。

VBAのコードは、作成タブの「Visual Basic」ボタンをクリックして、Visual Basic for Applicationsの別ウインドウを開いて作成していく。
このウインドウは、いつまで経っても操作性が変化しない。.NETじゃない昔のVBを操作しているようなデジャブ感を味わいつつ、操作性が変わらないのは「いいことだ」としみじみ思いながら、標準モジュールに、ModuleTestを作成して、Public Functionでf_fooを作成してみた。

AccessVBAファンクションを作成.png

.NETじゃなくVBAなので、Return命令は使えない。ファンクションと同じ名前の変数で戻り値を返す。
f_fooファンクションは、引数を倍にして戻すだけ。
当然ながら、VBの文法で処理内容を書くわけです。

f_fooを呼び出すクエリを作成してみる。

AccessVBAファンクションf_fooをクエリから呼び出し.png

SQLビューにしたらこんな感じ。

AccessVBAファンクションf_fooをクエリから呼び出しSQL.png

実行するとこうなる。

AccessVBAファンクションクエリの結果.png

ちゃんと計算されている。

さて、VBAファンクションを作成して、SQLから呼び出すことができた。
VBAファンクションはストアドファンクションと呼ぶべきかどうか...
VBAファンクションはVBAで書かれているものだからなぁ... SQLじゃないし。

ということで、SQLポケリでは、Accessでは、ストアドプロシージャを扱えない、ということになっているのであった。どこかに、書いておくべきかなぁ...
えーと、長い言い訳でした。すみません。



サイト内を検索


nice!(0)  コメント(0) 
共通テーマ:携帯コンテンツ

MS Access ルックアップフィールド [Accessクエリ]



MS Access ルックアップフィールド

前回、パラメータクエリを調べた。
クエリのパラメータ部分に値を投入するのは、ダイアログボックスからでしかできないらしい。VBAマクロであれば、Parameterオブジェクトを使ってやればできなくもない。クエリデザイナやSQLビューでテーブルのある列の値をパラメータとして渡すことができないかとやってみたが、無理だった。

なんとかIDをパラメータで受け取って、なんとか名を返すクエリを作成しておいて、それを別のクエリから呼び出してやれば、面倒な結合作業をする必要がなくなるかな?
と思ったのであるが、パラメータクエリではできないようである。

しかし、Accessにはルックアップフィールドなるものがあり、これを使用すれば、なんとかマスタから、なんとかIDを検索して、なんとか名で表示する、ということが簡単にできるらしい。
やってみるとしよう。なんとかマスタだとわかりにくいので商品マスタにしよう。まずは、商品マスタテーブルを作成するのである。

作成した商品マスタテーブルにレコードを作成

Access商品マスタ.png

商品ID列が、主キーであり、オートナンバー型となっているところがミソ。

注文テーブルを作成

次に商品マスタの主キーである商品IDを参照する、注文テーブルを作成してみる。
注文ID列を主キー、オートナンバー型で作成。
注文日列を日付時刻型で作成。
商品列を「ルックアップウイザード」で作成。

Accessルックアップウイザードを起動.png

Accessルックアップフィールド1.png

Accessルックアップフィールド2.png

Accessルックアップフィールド3.png

Accessルックアップフィールド4.png

Accessルックアップフィールド5.png

Accessルックアップフィールド6.png

これで、商品列がルックアップフィールドになった。商品マスタテーブルを開いているとリレーションを設定する際にエラーになるので注意。
商品列の次に、個数列を作成して、注文テーブルが完成となった。

注文テーブルにレコードを作成してみる

データシートビューに変更して、レコードを作成してみる。
注文IDは自動採番なので、注文日から入力していく。
次は商品列。ここがルックアップフィールドになっている。

Access注文テーブルの商品列がルックアップフィールド.png

このように、プルダウンのリストが表示され、商品マスタの内容が表示されている。

ガムを選んで、個数に1を入れてみた。

Accessルックアップフィールドの商品を選択.png

あら簡単。
これならフォームを作成しなくても、かなりいい線で入力できちゃう。
商品IDを気にしなくてよいのがイイね。

商品マスタテーブルを開いてみると

商品マスタをデータシートビューで表示してみると、以下のようになった。

Access商品マスタテーブルに子レコードができる.png

商品「ガム」のレコードに子レコードが付く感じになっている。子レコードは、注文テーブルの内容だし。ここで入力も可能なようである。

ここまでできるのなら、単価*個数で金額の計算もやってみたいと思うでしょ。

できちゃうのですよ。Accessって"なにげ"にすごいのかも。
まずは、注文テーブルへの入力用のクエリを作成する。

注文テーブル入力用クエリを作成

作成タブに移動して、「クエリデザイン」ボタンをクリックしてクエリを作成する。
テーブルのリストが出てくるので、「商品マスタ」と「注文」のふたつを選択して「追加」する。Ctrlを押しながらクリックすれば、複数選択ができる。

ルックアップウイザードで、参照整合を付けたので、自動的に結合条件(リレーションシップ)が付いている。これは、便利。

フィールドに入力したい項目を列挙していく。
注文日、商品(ルックアップフィールド)、個数、金額(単価*個数で計算)。
このくらいでよいでしょう。

Access注文入力用クエリ.png

注文入力用クエリでレコードを作成

データシートビューに切り替える。
ビューの切り替えは、右下のステータスバーでやると操作しやすいかも。

Access注文入力用クエリをデータシートビューに切り替え.png

こんな感じになるので、後は入力すればよいだけ。

Access注文入力用クエリにデータを入力.png

金額の列は、計算しているので、入力はできない。個数を入力すると自動的に計算される。
すばらしい。





サイト内を検索


nice!(0)  コメント(0) 
共通テーマ:携帯コンテンツ
前の10件 | - Accessクエリ ブログトップ

AREarthroidPro ARで地球を表示するアプリ

Copyright Atsushi Asai Google+朝井淳
[改訂第4版]SQLポケットリファレンス

[改訂第4版]SQLポケットリファレンス

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2017/02/18
  • メディア: 単行本(ソフトカバー)

[データベースの気持ちがわかる]SQLはじめの一歩 (WEB+DB PRESS plus)

[データベースの気持ちがわかる]SQLはじめの一歩 (WEB+DB PRESS plus)

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2015/03/03
  • メディア: 単行本(ソフトカバー)
C言語 ポインタが理解できない理由 [改訂新版] (プログラミングの教科書)

C言語 ポインタが理解できない理由 [改訂新版] (プログラミングの教科書)

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2011/04/08
  • メディア: 単行本(ソフトカバー)

かんたんAndroidアプリ作成入門 (プログラミングの教科書)

かんたんAndroidアプリ作成入門 (プログラミングの教科書)

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2013/04/16
  • メディア: 単行本(ソフトカバー)