Steuern der Reihenfolge von Operationen in einer SQL-Abfrage
Bei der Ausführung von SQL-Abfragen ist es wichtig, die Reihenfolge, in der die Klauseln ausgewertet werden, zu verstehen und zu steuern, damit Sie die Ergebnisse erhalten, die Sie erwarten.
In diesem Szenario sollten Sie sich vorstellen, dass Sie mit einer globalen Demografiedatenbank arbeiten und alle Städte in China finden möchten, die entweder mindestens 100.000 Einwohner haben oder Provinzhauptstädte sind.
Gruppieren und Aufheben der Gruppierung von Klauseln
In einer Abfrage mit mehreren Klauseln können Sie Klauseln gruppieren und die Gruppierung von Klauseln aufheben, um die Reihenfolge der Operationen zu steuern. Wenn Sie zwei oder mehr Klauseln gruppieren möchten, halten Sie die Umschalttaste gedrückt, während Sie die Klauseln durch Klicken auswählen. Klicken Sie dann auf Klauseln gruppieren
. Wenn Sie die Gruppierung von Klauseln aufheben möchten, dann wählen Sie eine Klausel in einer Gruppe aus und klicken auf Gruppierung der Klauseln aufheben
.
Die beiden folgenden Beispiele beziehen sich auf dieselbe Abfrage. Im ersten Beispiel werden Klauseln nicht gruppiert und die Ergebnisse werden nicht erwartungsgemäß zurückgegeben. Im zweiten Beispiel werden Klauseln gruppiert, um die richtige Reihenfolge der Operationen zu erzwingen, damit die erwarteten Ergebnisse zurückgegeben werden.
Nicht gruppierte Klauseln
Wenn Sie diese nicht gruppierte Abfrage ausführen, sucht sie zuerst alle Städte in China und filtert dann die chinesischen Städte, die mehr als 100.000 Einwohner haben. Danach wertet sie mit dem Oder-Operator das gesamte Dataset aus, um die Provinzhauptstädte zurückzugeben. Das Endergebnis enthält dann die chinesischen Städte, die mehr als 100.000 Einwohner haben, und weltweit jede Stadt, die eine Provinzhauptstadt ist. Dies war aber nicht beabsichtigt. Der Grund dafür ist, dass der Und-Operator Vorrang vor dem Oder-Operator hat. Deshalb wird das Und zuerst ausgewertet.

Gruppierte Klauseln
Damit die gewünschten Ergebnisse zurückgegeben werden, muss in diesem zweiten Beispiel der Oder-Operator zuerst ausgewertet werden. Sie können Klauseln gruppieren, um die Reihenfolge der Operationen zu erzwingen. Die Klauseln in einer Gruppe werden vor den Klauseln außerhalb der Gruppe ausgewertet.

Bei angewendeter Gruppierung wertet die Abfrage zuerst die Klauseln in der Gruppe aus: Ob eine Stadt mindestens 100.000 Einwohner hat oder eine Provinzhauptstadt ist. Danach überprüft sie, ob dies eine Stadt in China ist. Der Und-Operator stellt dann sicher, dass die Abfrage richtigerweise die Städte, die beide Kriterien erfüllen, zurückgibt: Chinesische Städte, die mindestens 100.000 Einwohner haben oder Provinzhauptstädte sind.
Das Gruppieren von Klauseln entspricht dem Einschließen von Klauseln in Klammern. Im Modus SQL-Editor sieht diese Abfrage wie folgt aus:
CNTRY_NAME = 'China' And (POP > 100000 Or STATUS = 'Provincial capital')
Priorisieren von Attributklauseln
Wenn Sie eine Abfrage für eine Enterprise-Geodatabase-Feature-Class ausführen, greift der Client (ArcGIS Pro) über die SQL-Abfrage auf die Datenbank zu, fragt die Datenquelle in der Datenbank ab und gibt ein Ergebnis zurück. In der Kartenansicht können Sie auswählen, ob die räumliche Klausel als Teil der Ausführung der Abfrage für die Feature-Class in der Datenbank (Standard) ausgeführt werden soll oder ob die Ausführung im Client erst erfolgen soll, wenn die Attributklauseln der Abfrage verarbeitet wurden. Klicken Sie im Abfragebearbeitungsmodus auf das Menüsymbol
, und aktivieren Sie die Option Attributklauseln priorisieren, damit die räumliche Klausel im Client angewendet wird, nachdem die Datenbank die Features gefiltert hat. Dies kann die Darstellungs-Performance verbessern.
Hinweis:
Die Option ist nur vorhanden, wenn die Datenquelle für den Layer eine Enterprise-Geodatabase-Feature-Class ist.