SELECT 句の例

以下の例では、Spectrum Spatial が委任の規則に従いながらクエリをデータ ソース プロバイダに委任する方法を示しています。集約を行うクエリと行わないクエリの両方が示されています。すべての例で、同じ空間 "table" を使用します。テーブルには以下の属性があります。
  • city [char25]
  • state [char20]
  • pop [decimal(12,0)]
  • hhinc [decimal(8,0)]
  • area [decimal(6.1)]
  • GEOLOC (Obj)

例 1:

SELECT * FROM table

このクエリは、テーブルのすべての行からすべての属性を返します。「*」は、すべての属性を表すワイルドカードです。Spectrum Spatial は「*」を展開してテーブル内の全属性をテーブル内と同じ順序でリスト化し、クエリ全体をデータ ソース プロバイダに委任します。この動作は規則 1 に基づきます。

例 2:

SELECT Count(*) FROM table

この集約クエリは、テーブルのすべての行からすべての属性を返します。これは、集約関数が SELECT 句の中にある規則 5 を満たします。

例 3:

SELECT state, city FROM table 

このクエリは、テーブルにあるすべての行から "state" 属性と "city" 属性を返します。このクエリは、規則 2 および規則 4 に従って、データ ソース プロバイダに完全に委任されます。

例 4:

SELECT UPPER(city) FROM table

この例では、データ ソース プロバイダに一部のみがプッシュ ダウンされるクエリを初めて紹介します。規則 6 により、Spectrum Spatial は演算子または関数をデータ ソース プロバイダに委任できません。これは Spectrum Spatial が UPPER 関数を実行しなければならないことを意味します。そのためには、"city" 属性を "table" から取得し、以下のクエリを作成してデータ ソース プロバイダに委任する必要があります。

SELECT city FROM table

以下のクエリは、データ プロバイダから返されたクエリ結果に対して Spectrum Spatial によって実行されます。

SELECT UPPER(city) FROM <results of the delegation> 

例 5:

SELECT city, pop/area AS proportion FROM table

この例において、ユーザが求めているのは、'pop' を 'area' と 'city' で割った結果を返すことです。規則 6 により、'/' は委任できません。Spectrum Spatial は、規則 1 も活用してクエリを満たすために必要な属性を取得し、以下のクエリを作成してデータ プロバイダに委任します。

SELECT city, pop, area FROM table
以下のクエリは、データ プロバイダから返されたクエリ結果に対して Spectrum Spatial によって実行されます。結果は、エイリアスを使用して返されます。元のクエリにエイリアスが提供されていない場合は、コンピュータによって生成されたわかりにくい名前が結果に付けられます。
SELECT city, pop/area AS proportion FROM <results of the delegation>
例 6:
SELECT city, avg(hhinc) FROM table WHERE state='ny' GROUP BY city ORDER BY city

このクエリは、テーブル内のすべての行の ‘city' 属性と、平均世帯収入 (hhinc) を返します。このクエリは、規則 2規則 3規則 5 に従って、データ プロバイダに完全に委任されます。

例 7:
SELECT city, avg(hhinc) FROM table WHERE pop => 50000 GROUP BY city ORDER BY city

この例において、データ ソース プロバイダは avg() 関数をサポートしますが、WHERE 句内の => 演算子をサポートしません。データ ソース プロバイダは、次のクエリに従って動作します。

SELECT city, hhinc FROM table 

Spectrum Spatial は、次のクエリに従って動作します。

select city, avg(hhinc) FROM <results from the delegation> WHERE pop => 50000 GROUP BY city ORDER BY city
例 8:
SELECT city, avg(hhinc) FROM table WHERE pop => 50000 GROUP BY city ORDER BY city

この例において、データ ソース プロバイダは avg() 関数と WHERE 句内の => 演算子をサポートしますが、GROUP BY をサポートしません。データ ソース プロバイダは、次のクエリに従って動作します。

SELECT city, hhinc FROM table WHERE pop => 50000 

Spectrum Spatial は、次のクエリに従って動作します。

select city, avg(hhinc) FROM <results from the delegation> WHERE pop => 50000 GROUP BY city ORDER BY city