WHERE- und ORDER BY-Klauseln
In diesem Kapitel erfahren Sie, wie Sie Datenbankdaten mit Hilfe der WHERE- und der ORDER BY-Klausel filtern bzw. sortieren können. WHERE- und ORDER BY-Klauseln müssen in das Dialogfeld SQL/NoSQL-WHERE/ORDER-Eigenschaften eingegeben werden.
WHERE
Um eine WHERE-Klausel zu verfassen, verwenden Sie die Syntax des entsprechenden SQL-Dialekts der Datenbank. Beispielsweise können Sie Operatoren, Platzhalter sowie Unterabfragen und Aggregatfunktionen in Unterabfragen verwenden. Um einen Parameter zu erstellen, der über das Mapping übergeben werden kann, geben Sie einen Doppelpunkt ( :), gefolgt vom Namen des Parameters ein.
ORDER BY
Um eine ORDER BY-Klausel zu verfassen, definieren Sie ein oder mehrere zu sortierende Felder und fügen Sie optional das Schlüsselwort ASC oder DESC hinzu. Wenn Sie kein Schlüsselwort hinzufügen, werden die Daten standardmäßig in aufsteigender Reihenfolge sortiert.
Wenn Sie die Klausel fertig erstellt haben und auf OK klicken, überprüft MapForce die Anweisung auf Syntaxfehler.
Operatoren
Die nachstehende Tabelle enthält eine Liste einiger typischer Operatoren, die in der WHERE-Klausel verwendet werden können:
Operator | Beschreibung |
|---|---|
= | ist gleich |
<> | ist nicht gleich |
< | kleiner als |
> | größer als |
>= | größer oder gleich |
<= | kleiner oder gleich |
IN | Vergleicht einen Wert mit einer angegebenen Liste von Werten |
LIKE | Vergleicht einen Wert mit einem angegebenen Muster |
BETWEEN | Überprüft, ob sich ein Wert innerhalb eines angegebenen Bereichs befindet |
Verwenden Sie das Platzhalterzeichen % (Prozent), um eine beliebige Anzahl von Zeichen in einem Muster darzustellen. Verwenden Sie z.B. den folgenden Ausdruck, um alle Datensätze, die mit "r" enden, aus einem Feld namens lastname abzurufen:
lastname LIKE "%r" |
Wenn Sie mit Datenbanken arbeiten, die das Speichern und Abfragen von XML-Daten unterstützen (z.B. IBM DB2, Oracle und SQL Server) können Sie XML-Funktionen und Schlüsselwörter für die jeweilige Datenbank verwenden. Beispiel:
xmlexists('$c/Client/Address[zip>"55116"]' passing USER.CLIENTS.CONTACTINFO AS "c") |
Siehe auch Beispiel: Extrahieren von Daten aus IBM DB2-Spalten.
Wenn Sie die abgerufenen Datensätze optional nach einem bestimmten Feld sortieren möchten, fügen Sie im entsprechenden Textfeld des Dialogfelds SQL/NoSQL-WHERE/ORDER-Eigenschaften eine ORDER BY-Klausel hinzu. Um nach mehreren Feldern zu sortieren, trennen Sie die Felder durch Kommas. Sie können die Sortierreihenfolge mit Hilfe der Schlüsselwörter ASC und DESC ändern. So werden z.B. mit der folgenden ORDER BY-Klausel Datensätze in absteigender Reihenfolge nach lastname und firstname sortiert:
lastname DESC, firstname DESC |
Auswählen eindeutiger Zeilen aus einer Datenbank
Je nachdem, welche Feldern ausgewählt sind und welche Daten diesen zugrunde liegen, kann eine Abfrage doppelt vorhandene Zeilen zurückgeben. Damit Sie nur eindeutige Zeilen erhalten, aktivieren Sie in der WHERE/ORDER-Komponente (Abbildung unten) das Kontrollkästchen Nur eindeutige Zeilen auswählen. Dadurch wird die DISTINCT-Klausel zur SELECT-Anweisung hinzugefügt, wodurch der Datenbank-Server doppelt vorhandene Zeilen herausfiltert.

Filtern von Daten in Azure CosmosDB (Enterprise Edition)
Wenn der Name eines Containers in Ihrer CosmosDB Sonderzeichen enthält (z.B. +, -, @, usw.) oder ein Schlüsselwort ist, kann dieser Name in Abfragen nicht verwendet werden und Sie erhalten von der Datenbank einen Syntaxfehler. Zur Vermeidung potenzieller Probleme verwendet MapForce für CosmosDB-Abfragen die folgende Syntax:
SELECT * FROM ROOT AS c WHERE c.<field> ORDER BY c.<field>
Das Schlüsselwort ROOT in der FROM-Klausel referenziert den aktuell abgefragten Container. Da das Schlüsselwort ROOT nicht zum Adressieren von Feldern in WHERE- und ORDER BY-Klauseln verwendet werden kann, erhält der Container den Aliasnamen c, der dem Container über das Schlüsselwort AS zugewiesen wird. Durch Zuweisung eines Aliasnamens kann der Container-Inhalt gefiltert und sortiert werden.
Beachten Sie, dass allen Feldreferenzen im Dialogfeld WHERE/ORDER der Container-Aliasname c vorangestellt werden muss (siehe Beispiel unten).
SELECT * FROM ROOT AS c WHERE c.age > 20 ORDER BY c.name
Beispiele
Beispiel 1
Die folgende WHERE-Klausel wird für die Tabelle users der Datenbank Nanonull.sqlite definiert. Sie ruft diejenigen Datensätze ab, in denen die last_name-Werte gemäß den String-Vergleichsregeln der Datenbank größer als "M" sind.
last_name > "M" |

Beispiel 2
Die folgende WHERE-Klausel erstellt einen Parameter Name. Dieser Parameter wird im Mapping in der WHERE/ORDER-Komponente angezeigt.
last_name LIKE :Name |

Die Konstante M% liefert den Wert von Name. Der Platzhalter % steht für beliebig viele Zeichen. Aufgrund dessen ruft das Mapping alle Nachnamen, die mit dem Buchstaben M beginnen, ab.
Beispiel 3
Mit der folgenden WHERE-Klausel werden zwei Parameter erstellt, min und max, mit denen die Werte von quantity verglichen werden. Die Werte min und max stammen aus den zwei Konstanten im Mapping.
quantity > :min AND quantity < :max |

Mit der oben gezeigten Bedingung werden Datensätze, in denen quantity gleich dem Wert von min oder max ist, ausgeschlossen. Um die Grenzwerte (10 und 100) einzubeziehen, verwenden Sie den BETWEEN-Operator:
quantity BETWEEN :min AND :max |