Beispiele der SELECT-Klausel

In den nachfolgenden Beispielen wird untersucht, wie Spectrum Spatial Abfragen an den Datenquellenanbieter delegiert und dabei die Delegierungsregeln unterstützt. Es werden aggregierende und nicht aggregierende Abfragen bereitgestellt. In den einzelnen Beispielen wird die gleiche „Geodaten-Tabelle“ verwendet. Sie enthält folgende Attribute:
  • city [char25]
  • state [char20]
  • pop [decimal(12,0)]
  • hhinc [decimal(8,0)]
  • area [decimal(6,1)]
  • GEOLOC (Obj)

Beispiel 1:

SELECT * FROM table

Diese Abfrage gibt alle Attribute aus allen Zeilen der Tabelle zurück. Das Sternchen (*) ist ein Platzhalter, der für alle Attribute steht. Spectrum Spatial erweitert eine Liste aller Attribute in der Tabelle in der aufgeführten Reihenfolge durch das Sternchen (*), und delegiert die gesamte Abfrage an den Datenquellenanbieter. Grund dafür ist Regel 1.

Beispiel 2:

SELECT Count(*) FROM table

Diese Aggregationsabfrage gibt alle Attribute aus allen Zeilen der Tabelle zurück. Damit wird Regel 5 erfüllt, bei der die Aggregationsfunktion in der SELECT-Klausel enthalten ist.

Beispiel 3:

SELECT state, city FROM table 

Diese Abfrage gibt für alle Zeilen in der Tabelle die Attribute „Bundesland/Kanton“ und „Ort“ zurück. Diese Abfrage wird aufgrund von Regel 2 und Regel 4 vollständig an den Datenquellenanbieter delegiert.

Beispiel 4:

SELECT UPPER(city) FROM table

Dieses Beispiel bietet einen ersten Blick auf eine Abfrage, die nur teilweise an den Datenquellenanbieter delegiert wurde. Regel 6 gibt an, dass Spectrum Spatial keine Operatoren oder Funktionen an Datenquellenanbieter delegieren kann. Dies bedeutet, dass Spectrum Spatial die Funktion „UPPER“ ausführen muss. Hierfür benötigt es das Attribut „city“ aus „table“ und erstellt damit folgende Abfrage, die an den Datenanbieter delegiert werden soll:

SELECT city FROM table

Die folgende Abfrage wird von Spectrum Spatial mit den Ergebnissen der Abfrage des Datenanbieters ausgeführt:

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

Beispiel 5:

SELECT city, pop/area AS proportion FROM table

In diesem Beispiel möchte der Benutzer, dass „pop“ in die zurückgegebenen Attribute „area“ und „city“ unterteilt wird. Regel 6 lässt nicht zu, dass „/“ delegiert wird. Spectrum Spatial nutzt zudem Regel 1 für das Abrufen der Attribute, die zum Durchführen der Abfrage erforderlich sind, und erstellt folgende Abfrage, die an den Datenanbieter delegiert werden soll:

SELECT city, pop, area FROM table
Die folgende Abfrage wird von Spectrum Spatial mit den Ergebnissen der Abfrage des Datenanbieters ausgeführt. Die Ergebnisse werden unter Verwendung eines Alias zurückgegeben. Wenn in der ursprünglichen Abfrage kein Alias angegeben wurde, enthalten die Ergebnisse einen computergenerierten, nicht benutzerfreundlichen Namen.
SELECT city, pop/area AS proportion FROM <results of the delegation>
Beispiel 6:
SELECT city, avg(hhinc) FROM table WHERE state='ny' GROUP BY city ORDER BY city

Diese Abfrage gibt das Attribut „city“ für alle Zeilen in der Tabelle und das durchschnittliche Haushaltseinkommen (hhinc) zurück. Diese Abfrage wird aufgrund von Regel 2, Regel 3 und Regel 5 vollständig an den Datenanbieter delegiert.

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

In diesem Beispiel unterstützt der Datenquellenanbieter die Funktion „avg()“, er unterstützt jedoch nicht den Operator „=>“ in der WHERE-Klausel. Die Abfrage, auf die der Datenquellenanbieter reagiert, lautet:

SELECT city, hhinc FROM table 

Und Spectrum Spatial würde darauf wie folgt reagieren:

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

In diesem Beispiel unterstützt der Datenquellenanbieter die Funktion „avg()“ und den Operator „=>“ in der WHERE-Klausel, er unterstützt jedoch nicht „GROUP BY“. Die Abfrage, auf die der Datenquellenanbieter reagiert, lautet:

SELECT city, hhinc FROM table WHERE pop => 50000 

Und Spectrum Spatial würde darauf wie folgt reagieren:

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