MS Access Tips/Sample and VBA and Blog customize etc...

SQL で、テーブル名.* と * の違いとは?

SQLで、フィールド数の多いテーブルですべてのフィールドを表示するとき、*(アスタリスク)を使うというのはご存じですよね。

SELECT テーブル名.* FROM テーブル名;

テーブル名を省略して、

SELECT * FROM テーブル名;

としても、結果は同じです。ですので、テーブル名.* と * に違いはないと思ってました。ところが、Accessでは、大きな違いがあるということを最近発見しました。

難易度:

Access Clubの掲示板の質問の検証のために下記のSQLを試しました。Tbl1 テーブルに、F1, F2, F3, F4, F5 の5つのフィールドがあるとします。

出力されるフィールドは下記のようになると予想したのですが、
F3, F4, F1, F2, フィールド0, フィールド1, F5
(フィールド0, フィールド1 は、F3, F4 の別名フィールド)
実際は、
F3, F4, F1, F2, F5
となり、重複するフィールドは表示されませんでした。

試しに、

とすると、最初の予想通り、重複するフィールドが別名で表示されました。

テーブルの全フィールドを出力したいが、特定のフィールドは先頭に持ってきたいというときは、今まで、下記のようにすべてのフィールドを記述してましたが、

単独 * を使うと楽に記述できますね。

ちなみに、特定のフィールドを最後に持ってきたいと思って、

としても、F3, F4 は先頭に来てしまいます。こういう場合は、素直に全フィールドをSQLに記述する必要があります。

この私にとっての新発見を前記の掲示板で報告したところ、単独 * は、クエリプロパティの「全フィールド表示」に対応するという指摘をいただきました。デザインビューで「全フィールド表示」を「はい」にすると、SQLビューには * が追加され、逆にSQLビューで * を追加すると、「全フィールド表示」は「はい」になります。これは、「全フィールド表示」のヘルプにも記載されてます。

メモ SQL ステートメントでフィールド名の代わりにアスタリスク (*) を使うと、"OutputAllFields/全フィールド表示" プロパティに [Yes/はい] を設定した場合と同じ結果になります。

しかし、いままで10年以上Accessをさわってきて、クエリプロパティで「トップ値」や「固有の値」を何度となく設定してきたのに、そのすぐ上の「全フィールド表示」プロパティの存在を意識したことが無かったとは orz。

参考URL SELECT文中の*(アスタリスク)の使い方 --Access Club 超初心者 FORUM--


拍手する

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/110-e013ff93
該当の記事は見つかりませんでした。