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.

Die folgenden zwei 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.

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.

Beispiel 1: Ohne Gruppierung

Diese Abfrage können Sie mit drei Klauseln erstellen, wie in der folgenden Abbildung dargestellt. Wenn Sie diese 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.

Drei Klauseln in einer Abfrage, nicht gruppiert

Beispiel 2: Mit Gruppierung

Damit die gewünschten Ergebnisse zurückgegeben werden, muss in diesem Fall 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.

Drei Klauseln in einer Abfrage, die letzten zwei Klauseln sind gruppiert

Wenn Sie zwei oder mehr Klauseln gruppieren möchten, dann halten Sie die Umschalttaste gedrückt und klicken auf Klauseln gruppieren 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 Gruppierung der Klauseln aufheben.

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 SQL-Modus sieht diese Abfrage wie folgt aus:

CNTRY_NAME = 'China' And (POP > 100000 Or STATUS = 'Provincial capital')

Verwandte Themen