SQL (Structured Query Language) ist eine Standardcomputersprache, die definierte Syntax und Ausdrücke enthält, die für den Zugriff auf und die Verwaltung von Daten in Datenbanken und anderen Datenverarbeitungstechnologien verwendet werden.
Das American National Standards Institute (ANSI) definiert einen Standard für SQL. Die meisten relationalen Datenbankmanagementsysteme (RDBMS) verwenden diesen Standard und haben ihn erweitert, sodass die SQL-Syntaxen verschiedener RDBMS leicht voneinander abweichen.
Abfrageausdrücke in ArcGIS entsprechen den SQL-Standardausdrücken. Die in einem Ausdruck verwendete SQL-Syntax variiert je nach Datenquelle. Jede Datenquelle hat eine eigene SQL-Variante, die als "SQL-Dialekt" bezeichnet wird. Dazu zählen beispielsweise die folgenden Varianten:
- Für dateibasierte Daten, einschließlich File-Geodatabases, Shapefiles, In-Memory-Tabellensichten, Textdateien wie beispielsweise Tabellen in den Formaten .dbf, .csv, .txt und .xlsx sowie Feature-Services, in denen standardisierte Abfragen verwendet werden, wird der ArcGIS-SQL-Dialekt verwendet, der eine Teilmenge der SQL-Funktionen unterstützt.
- Mobile-Geodatabases, die SQLite-Bibliothek "ST_geometry", Open Geospatial Consortium (OGC) GeoPackage und Microsoft Excel verwenden den SQL-Dialekt SQLite.
- Datenbanken und Enterprise-Geodatabases verwenden die SQL-Syntax des zugrunde liegenden RDBMS, wie beispielsweise Oracle, Microsoft SQL Server, PostgreSQL, SAP HANA und IBM Db2. Dabei wird für jede Datenbank ein leicht abweichender SQL-Dialekt verwendet.
Wenn Sie ArcGIS-Dialogfelder zum Erstellen eines SQL-Ausdrucks verwenden, wird das Anwenden der richtigen Syntax für die abgefragte Datenquelle durch automatisches Vervollständigen erleichtert. Während der Eingabe wird eine Eingabeaufforderung angezeigt, die Feldnamen, Werte, Schlüsselwörter und Operatoren anzeigt, die von der Datenquelle unterstützt werden.
Tipp:
Nehmen Sie die folgenden Informationen zu Hilfe, um zu bestimmen, wann beim Erstellen eines SQL-Ausdrucks die ArcGIS-SQL-Syntax und wann die SQL-Syntax des zugrunde liegenden RDBMS verwendet wird.
- Wenn die Daten im SQL-Ausdruck aus einer Mischung von Datenquellen-Speicherorten kommen, geschieht Folgendes:
- Wenn die Daten sowohl aus dateibasierten Datenquellen als auch aus einem RDBMS kommen, wird die ArcGIS-SQL-Syntax verwendet.
- Wenn alle Daten im SQL-Ausdruck aus dem gleichen Datenquellen-Speicherort kommen, geschieht Folgendes:
- Wenn die Daten aus einer dateibasierten Datenquelle kommen, wird die ArcGIS-SQL-Syntax verwendet.
- Wenn es sich bei der Datenquelle um eine Datenbank oder Enterprise-Geodatabase handelt, übergibt ArcGIS den SQL-Ausdruck zur Auflösung dem RDBMS. Entnehmen Sie die spezifische Ausdruckssyntax und die unterstützten Datentypen der Dokumentation für das Datenbankmanagementsystem.
In ArcGIS AllSource finden Sie das Dialogfeld für SQL-Ausdrücke an den folgenden Stellen:
- Beim Auswählen nach Attributen mit dem Geoverarbeitungswerkzeug Layer nach Attributen auswählen
- Auf der Registerkarte Definitionsabfrage im Dialogfeld Layer-Eigenschaften
- Auf der Registerkarte Anzeigefilter im Bereich Symbolisierung
- Beim Erstellen von Berichten im Bereich Neuen Bericht erstellen
- Beim Exportieren von Tabellen mit dem Geoverarbeitungswerkzeug Tabelle exportieren
- Beim Exportieren von Features mit dem Geoverarbeitungswerkzeug Features exportieren
- Beim Verwenden des Geoverarbeitungswerkzeugs Feld berechnen zum Erstellen eines Ausdrucks, mit dem einfache oder komplexe Berechnungen für Feldwerte ausgeführt werden sollen
- Beim Verwenden von Auswählen zum Abfragen von Daten zur weiteren Analyse
- Beim Verwenden des Geoverarbeitungswerkzeugs Abfragetabelle erstellen zum Erstellen einer Layer- oder Tabellensicht
- Beim Verwenden des Geoverarbeitungswerkzeugs Feature-Layer erstellen zum Erstellen eines Feature-Layers
- Beim Erstellen einer Ansicht in einer Datenbank oder Geodatabase mit dem Geoverarbeitungswerkzeug Datenbanksicht erstellen
- Beim Verwenden des Geoverarbeitungswerkzeugs Anhängen zum Anhängen mehrerer Eingabe-Datasets in einem Ziel-Dataset
- Beim Verwenden von ProSDK Core.Data.QueryDef
Syntax für einen SQL-Ausdruck
Ein SQL-Ausdruck enthält eine Kombination aus mindestens einem Wert, mindestens einem Operator und mindestens einer SQL-Funktion, die zum Abfragen oder Auswählen einer Teilmenge von Features und Tabellendatensätzen in ArcGIS verwendet werden können.
Alle SQL-Abfragen werden mit dem Schlüsselwort SELECT ausgedrückt.
SELECT * FROM bildet den ersten Teil des SQL-Ausdrucks und wird in den meisten ArcGIS-Dialogfeldern automatisch vorgegeben. Wenn Sie zum Beispiel eine Abfrage durch Eingeben von SQL-Syntax erstellen wird eine SELECT-Anweisung zum Auswählen von Feldern in einem Layer oder einer Tabelle verwendet und für Sie bereitgestellt.
Der nächste Teil des SQL-Ausdrucks nach SELECT * FROM <Layer_name> ist die WHERE-Klausel. Die WHERE-Klausel wird verwendet, um Datensätze abzurufen, die bestimmte Kriterien erfüllen. Diesen Teil des Ausdrucks müssen Sie erstellen.
Tipp:
Das Sternchen (*) in einem SQL-Ausdruck wird verwendet, um alle Spalten abzufragen.
Hier ist eine einfache Form einer WHERE-Klausel in einem SQL-Ausdruck:
- <Field_name> <Operator> <Value or String>
Beispiel: STATE_NAME = 'Florida'. Dieser Ausdruck enthält eine einzige Klausel und wählt alle Features aus, die "Florida" im Feld STATE_NAME enthalten.
Für zusammengesetzte Ausdrücke wird die folgende Form verwendet:
- <Field_name> <Operator> <Value or String> <Connector> <Field_name> <Operator> <Value or String> ...
Beispiel: STATE_NAME = 'Florida' OR (STATE_NAME = 'South Carolina' AND POP2010 > 15000). Dieser zusammengesetzte Ausdruck besteht aus mehreren Klauseln, die durch einen logischen Operator (AND oder OR) verbunden sind. Es werden alle Features ausgewählt, die Florida im Feld STATE_NAME enthalten, und alle Features, die South Carolina im Feld STATE_NAME enthalten und im Feld POP2010 einen größeren Wert als 15.000 aufweisen.
Tipp:
Optional können Klammern () verwendet werden, um die Reihenfolge der Operationen in zusammengesetzten Ausdrücken zu definieren.
Da Sie Spalten als Ganzes auswählen und die Syntax SELECT hart codiert ist., können Sie die SELECT *-Anweisung nicht auf die Rückgabe nur einiger Spalten der entsprechenden Tabelle beschränken. Aus diesem Grund können Schlüsselwörter wie beispielsweise DISTINCT, ORDER BY und GROUP BY in SQL-Ausdrücken in ArcGIS außer in Unterabfragen nicht verwendet werden. Weitere Informationen finden Sie im Abschnitt Unterabfragen weiter unten.
In den folgenden Abschnitten werden die Elemente allgemeiner in ArcGIS verwendeter SQL-Abfrageausdrücke beschrieben.
Allgemeine Abfragen: Suchen von Zeichenfolgen
Zeichenfolgen müssen in Abfragen immer in einfache Anführungszeichen gesetzt werden, z. B.:
STATE_NAME = 'California'
Bei Zeichenfolgen in Ausdrücken muss die Groß-/Kleinschreibung beachtet werden, es sei denn, die Ausführung erfolgt in Geodatabases in Microsoft SQL Server. Um eine Suche in anderen Datenquellen durchzuführen, bei der die Groß- bzw. Kleinschreibung nicht berücksichtigt wird, können Sie die Groß- und Kleinschreibung aller Werte mit einer SQL-Funktion vereinheitlichen. Verwenden Sie für dateibasierte Datenquellen wie File-Geodatabases oder Shapefiles die Funktion UPPER oder LOWER, um die Groß-/Kleinschreibung für eine Auswahl festzulegen. Durch den folgenden Ausdruck wird beispielsweise der Bundesstaat ausgewählt, dessen Name als 'Rhode Island' oder 'RHODE ISLAND' gespeichert ist:
UPPER(STATE_NAME) = 'RHODE ISLAND'
Um nach einer Teilzeichenfolge zu suchen, verwenden Sie den Operator LIKE (anstelle des Operators "="). Durch diesen Ausdruck werden z. B. die US-Bundesstaaten Mississippi und Missouri ausgewählt:
STATE_NAME LIKE 'Miss%'
Um mehrere Werte anzugeben, verwenden Sie den Operator IN. Wählen Sie beispielsweise alle Werte in Kalifornien, New York und Colorado aus.
STATE_NAME IN ('California', 'New York', 'Colorado')
Wenn die Zeichenfolge ein einzelnes Anführungszeichen enthält, müssen Sie zunächst ein weiteres Anführungszeichen als Escape-Zeichen einfügen, z. B.:
NAME = 'Alfie''s Trough'
OWNER_NAME IN ('Joseph D''Souza', 'Katherine Smith', 'Tim O''Brien')
Das Prozentzeichen (%) kann für eine beliebige Anzahl von Zeichen oder kein Zeichen stehen. Um bei der Suche ein Platzhalterzeichen zu verwenden, das für ein einzelnes Zeichen steht, verwenden Sie einen Unterstrich (_). Durch den folgenden Ausdruck werden beispielsweise die Zeichenfolgen "Catherine Smith" und "Katherine Smith" gefunden:
OWNER_NAME LIKE '_atherine Smith'
Sie können die Operatoren "Größer als" (>), "Kleiner als" (<), "Größer gleich" (>=), "Kleiner gleich" (<=), "ungleich" (<>) und BETWEEN verwenden, um Zeichenfolgenwerte basierend auf der Sortierreihenfolge auszuwählen. Durch diesen Ausdruck wird beispielsweise in einem Coverage nach allen Städten gesucht, deren Namen mit den Buchstaben M bis Z beginnen:
CITY_NAME >= 'M'
Zum Formatieren von Zeichenfolgen können Zeichenfolgen-Funktionen verwendet werden. Durch die Funktion LEFT wird zum Beispiel eine bestimmte Anzahl von Zeichen links von der Zeichenfolge zurückgegeben. Durch die folgende Beispielabfrage werden alle Bundesstaaten abgerufen, die mit dem Buchstaben "A" beginnen:
LEFT(STATE_NAME,1) = 'A'
Eine Liste der unterstützten Funktionen finden Sie in der Dokumentation zum jeweiligen RDBMS.
Allgemeine Ausdrücke: Suche nach NULL-Werten
Verwenden Sie das Schlüsselwort NULL zum Auswählen von Features und Datensätzen, die für das angegebene Feld NULL-Werte aufweisen. Dem Schlüsselwort NULL geht stets IS oder IS NOT voraus. Mit der folgenden Abfrage werden beispielsweise Städte gesucht, deren Einwohnerzahl für das Jahr 1996 nicht eingegeben wurde:
POPULATION IS NULL
Sie können auch mit der folgenden Abfrage Städte suchen, deren Einwohnerzahl für das Jahr 1996 eingegeben wurde:
POPULATION96 IS NOT NULL
Wenn ein Geometriefeld ausgewählt ist, kann nur nach den Schlüsselwörtern NULL und NOT NULL gesucht werden.
Allgemeine Ausdrücke: Suchen nach Zahlen
Als Dezimaltrennzeichen wird unabhängig von Gebietsschema oder Ländereinstellungen immer ein Dezimalpunkt (.) verwendet. Ein Komma darf in einem Ausdruck weder als Dezimal- noch als Tausendertrennzeichen verwendet werden.
In Abfragen nach Zahlenwerten können Sie die Operatoren "Gleich" (=), "Ungleich" (<>), "Größer als " (>), "Kleiner als" (<), "Größer gleich" (>=), "Kleiner gleich" (<=) und "BETWEEN" verwenden, z. B.:
POPULATION >= 5000
Zum Formatieren von Zahlen können numerische Funktionen verwendet werden. Mit der Funktion ROUND kann eine Zahl in einer File-Geodatabase beispielsweise auf eine bestimmte Anzahl von Dezimalstellen gerundet werden:
ROUND(SQKM,0) = 500
Eine Liste der unterstützten numerischen Funktionen finden Sie in der RDBMS-Dokumentation.
Datum und Uhrzeit
Allgemeine Regeln und Ausdrücke
In Geodatabase-Datenquellen werden Datumsangaben in Datumsfeldern gespeichert. In Shapefiles jedoch nicht. Daher umfassen die meisten der unten aufgeführten Abfrage-Syntaxbeispiele eine Uhrzeit-Referenz. In einigen Fällen kann die Abfrage ohne Uhrzeit gestellt werden, wenn bekannt ist, dass das Feld nur Datumsangaben enthält. In anderen Fällen muss die Abfrage die Uhrzeit enthalten, da sonst ein Syntaxfehler auftritt.
Bei der Suche nach Datumsfeldern muss sorgfältig der Typ des Datumsfeldes und die Syntax, die Ihre Datenquelle verlangt, beachtet werden. Wenn Sie eine Datumsabfrage im Klausel-Modus der Abfrageerstellung definieren, wird automatisch die korrekte Syntax für Sie generiert. Im Folgenden erhalten Sie ein Beispiel für eine Abfrage, die alle Datensätze am oder nach dem 1. Januar 2011 für ein Datumsfeld aus einer File-Geodatabase-Datenquelle zurückgibt:
INCIDENT_DATE >= timestamp '2011-01-01 00:00:00'
Hinweis:
In ArcGIS AllSource können Sie einen Wert für ein älteres Datum als 100 CE weder einfügen noch anzeigen. Wenn Sie einen Datumstyp verwenden, der auch die Uhrzeit speichert, dann entspricht die Uhrzeit 00:00:00 der Zeitangabe 24 Uhr (Mitternacht).
Wenn eine andere Uhrzeit als 00:00:00 mit den Datumsangaben gespeichert wird (z. B. 12. Januar 1999, 04:00:00), wird der Datensatz bei einer Abfrage des Datums allein nicht zurückgegeben. Wenn Sie für ein Datums-/Uhrzeitfeld nur ein Datum angeben, werden für die Uhrzeit Nullen verwendet und daher nur die Datensätze abgerufen, deren Uhrzeit "00:00:00 Uhr" lautet.
In der Attributtabelle werden das Datum und die Uhrzeit in einem benutzerfreundlichen, auf den Ländereinstellungen basierenden Format anstatt im Format der zugrunde liegenden Datenbank angezeigt. Damit könnten jedoch auch bestimmte Nachteile verbunden sein:
- Die in der SQL-Abfrage angezeigte Zeichenfolge hat möglicherweise nur wenig Ähnlichkeit mit dem in der Tabelle angezeigten Wert. Dies ist insbesondere dann der Fall, wenn Uhrzeitangaben betroffen sind. Wenn beispielsweise Ländereinstellungen für die USA festgelegt sind, wird eine im Format "00:00:15" eingegebene Uhrzeit in der Attributtabelle als "12:00:15 AM" angezeigt. Die Abfragesyntax lautet in diesem Fall "Datefield = '1899-12-30 00:00:15'".
- Die Attributtabelle erhält erst beim Speichern der Änderungen Informationen darüber, welche Datenquelle zugrunde liegt. Es wird zunächst versucht, den eingegebenen Wert so zu formatieren, dass er dem eigenen Format entspricht. Beim Speichern der Bearbeitungen wird der resultierende Wert dann so angepasst, dass er der Datenbank entspricht. Aus diesem Grund können Sie Uhrzeitangaben in ein Shapefile eingeben, die jedoch beim Speichern der Bearbeitungen gelöscht werden. Das Feld enthält dann den Wert "1899-12-30", der als "12:00:00 AM" oder je nach den Ländereinstellungen ähnlich angezeigt wird.
Datumssyntax für Geodatabases
Im Folgenden finden Sie Beispiele für die SQL-Syntax für Datums- und Zeitangaben, die von File-Geodatabases, mobilen Geodatabases und Datumsangaben in Shapefiles unterstützt werden. Einige Enterprise-Geodatabases und RDBMS-Datenquellen unterstützen auch die SQL-Syntax für Datums- und Zeitangaben, obwohl diese Datenquellen möglicherweise eine etwas andere SQL-Syntax erfordern.
Entnehmen Sie die spezifische SQL-Ausdruckssyntax und die unterstützten Datentypen der Dokumentation für das Datenbankmanagementsystem.
Hinweis:
- Oracle unterstützt reine Datumsfelder (esriFieldTypeDateOnly) und reine Uhrzeitfelder (esriFieldTypeTimeOnly) nicht.
- PostgreSQL unterstützt das Zeitstempelfeld mit Versatz (esriFieldTypeTimestampOffset) nicht.
File-Geodatabases
Reinen Datumsfeldern und reinen Uhrzeitfeldern in File-Geodatabases wird das Wort "date" bzw. "time" vorangestellt. Datums-/Uhrzeitfeldern wird "timestamp" vorangestellt.
Datefield = timestamp 'yyyy-mm-dd'
File-Geodatabases unterstützen die Verwendung einer Zeitangabe im Datumsfeld, daher kann dem Ausdruck Folgendes hinzugefügt werden:
Datefield = timestamp 'yyyy-mm-dd hh:mm:ss'
Für reine Datumsfelder, reine Uhrzeitfelder oder Zeitstempelfelder mit Versatz verwenden Sie das folgende Format:
//DateOnlyField = time 'yyyy-mm-dd' DateOnlyField = time '2003-01-08' //TimeOnlyField = date 'HH24:mm:ss' TimeOnlyField = date '14:35:00' //TimestampOffsetField = timestamp 'yyyy-mm-dd HH24:mm:ss -TZH:TZM' TimestampOffsetField = timestamp '2003-01-08 14:35:00 -08:00'
Mobile-Geodatabases
Datumsfeldern bestimmter Typen wird das Wort "JULIANDAY" vorangestellt. Andere werden nicht mit einer Funktion syntaktisch formatiert.
Datefield = JULIANDAY('yyyy-mm-dd')
Mobile-Geodatabases unterstützen die Verwendung der Uhrzeit in Datumsfeldern, daher kann dem Ausdruck Folgendes hinzugefügt werden:
Datefield = JULIANDAY('yyyy-mm-dd HH24:mm:ss')
//TimestampOffsetField = 'yyyy-mm-dd HH24:mm:ss -TZH:TZM' TimestampOffsetField = '2003-01-08 14:35:00 -08:00' //DateOnlyField = JULIANDAY('yyyy-mm-dd') DateOnlyField = JULIANDAY('2003-01-08') //TimeOnlyField = 'HH24:mm:ss' TimeOnlyField = '14:35:00'
Shapefiles, Coverages und andere dateibasierte Datenquellen
Datefield = date 'yyyy-mm-dd'
Shapefiles und Coverages unterstützen die Verwendung einer Zeit im Datumsfeld nicht.
Bekannte Einschränkungen
Die Abfrage nach einem Datum im linken Teil (erste Tabelle) von zwei Join-Tabellen kann nur mit dateibasierten Datenquellen, z. B. File-Databases, Shapefiles und DBF-Tabellen, durchgeführt werden. Es gibt jedoch einen möglichen Workaround zum Arbeiten mit nicht dateibasierten Daten (z. B. Enterprise-Geodatabase-Daten), wie unten beschrieben.
Die Abfrage eines Datums im linken Teil von zwei verbundenen Tabellen ist nur erfolgreich, wenn Sie die eingeschränkte Version von SQL verwenden, die für dateibasierte Datenquellen entwickelt wurde. Wenn Sie nicht eine solche Datenquelle verwenden, können Sie die Verwendung dieses Formats im Ausdruck erzwingen. Dazu stellen Sie sicher, dass sich der Abfrageausdruck auf Felder aus mehr als einer Join-Tabelle bezieht. Wenn zum Beispiel eine Feature-Class und eine Tabelle (FC1 und Table1) verbunden sind und beide aus einer Enterprise-Geodatabase stammen, tritt bei den folgenden Ausdrücken ein Fehler auf oder es werden keine Daten zurückgegeben:
FC1.date = date #01/12/2001# FC1.date = date '01/12/2001'
Eine erfolgreiche Abfrage kann z. B. so aussehen:
FC1.date = date '01/12/2001' and Table1.OBJECTID > 0
Da sich die Abfrage auf Felder aus beiden Tabellen bezieht, wird die eingeschränkte SQL-Version verwendet. In diesem Ausdruck ist "Table1.OBJECTID" bei Datensätzen, die während der Verbindungserstellung übereingestimmt haben, immer > 0. Somit hat dieser Ausdruck für alle Zeilen, die Verbindungsübereinstimmungen enthalten, den Wert "true".
Um sicherzustellen, dass jeder Datensatz mit "FC1.date = date '01/12/2001'" ausgewählt wird, verwenden Sie die folgende Abfrage:
FC1.date = date '01/12/2001' and (Table1.OBJECTID IS NOT NULL OR Table1.OBJECTID IS NULL)
Mit dieser Abfrage werden alle Datensätze mit "FC1.date = date '01/12/2001'" ausgewählt, egal ob es für die einzelnen Datensätze eine Verbindungsübereinstimmung gab oder nicht.
Kombinieren von Ausdrücken
Zusammengesetzte Ausdrücke können durch die Kombination mehrerer Ausdrücke durch die Operatoren AND und OR erstellt werden. Wenn Sie beispielsweise alle Häuser mit mehr als 1.500 Quadratfuß Wohnfläche und einer Garage für drei oder mehr Autos auswählen möchten, verwenden Sie folgenden Ausdruck:
AREA > 1500 AND GARAGE > 3
Bei Verwendung des Operators OR muss mindestens eine der Seiten des durch OR getrennten Ausdrucks wahr sein, damit der Datensatz ausgewählt wird, z. B.:
RAINFALL < 20 OR SLOPE > 35
Verwenden Sie den Operator NOT zu Beginn eines Ausdrucks, um Features oder Datensätze zu suchen, die dem angegebenen Ausdruck nicht entsprechen, z. B.:
NOT STATE_NAME = 'Colorado'
NOT-Ausdrücke können mit AND- und OR-Operatoren kombiniert werden. Mit dem folgenden Ausdruck werden beispielsweise alle Bundesstaaten in Neuengland außer Maine ausgewählt:
SUB_REGION = 'New England' AND NOT STATE_NAME = 'Maine'
Berechnungen
Berechnungen können mit den folgenden arithmetischen Operatoren in Ausdrücke einbezogen werden: +, -, * und /. Berechnungen können sich aus Feldern und Zahlen zusammensetzen, z. B.:
AREA >= PERIMETER * 100
Berechnungen können darüber hinaus auch zwischen Feldern ausgeführt werden. Um z. B. Länder zu suchen, die eine Bevölkerungsdichte kleiner oder gleich 25 Menschen pro Quadratmeile aufweisen, können Sie den folgenden Ausdruck verwenden:
POP1990 / AREA <= 25
Operator-Priorität
Bei der Auswertung von Ausdrücken werden Standardregeln für die Operator-Priorität angewendet. Beispielsweise wird der in Klammern eingeschlossene Teil eines Ausdrucks vor dem Teil ausgewertet, der nicht in Klammern eingeschlossen ist.
HOUSEHOLDS > MALES * (POP90_SQMI + AREA)
Beim Bearbeiten eines SQL-Ausdrucks können Sie im SQL-Bearbeitungsmodus Klammern hinzufügen, indem Sie sie eingeben oder mithilfe der Befehle Gruppieren oder Gruppierung aufheben im Klausel-Modus hinzufügen oder entfernen.
Unterabfragen
Eine Unterabfrage ist eine in einer anderen Abfrage geschachtelte Abfrage. Unterabfragen werden nur von Geodatabase-Datenquellen unterstützt. Sie können sie verwenden, um Prädikate oder Aggregatfunktionen einzusetzen oder um Daten mit Werten in einer anderen Tabelle zu vergleichen. Verwenden Sie dazu die Schlüsselwörter "IN" und "ANY". Durch die folgende Abfrage werden beispielsweise nur die Länder abgerufen, die nicht in der Tabelle "indep_countries" aufgeführt sind:
COUNTRY_NAME NOT IN (SELECT COUNTRY_NAME FROM indep_countries)
Hinweis:
Shapefiles und andere nicht aus Geodatabases stammende dateibasierte Datenquellen unterstützen keine Unterabfragen. Unterabfragen, die im Zusammenhang mit versionierten Enterprise-Feature-Classes und -Tabellen ausgeführt werden, geben keine in den Deltatabellen gespeicherten Features zurück. File-Geodatabases bieten nur eingeschränkte Unterstützung für Unterabfragen (wie in diesem Abschnitt beschrieben), während Enterprise-Geodatabases uneingeschränkte Unterstützung bieten. Weitere Informationen über sämtliche Unterabfragenoptionen von Enterprise-Geodatabases finden Sie in der RDBMS-Dokumentation.
Durch die folgende Abfrage werden die Features mit einem GDP2006 größer als GDP2005 aus allen Features in der Tabelle "countries" abgerufen:
GDP2006 > (SELECT MAX(GDP2005) FROM countries)
Die Unterstützung von Unterabfragen in File-Geodatabases ist auf Folgendes beschränkt:
- Skalar-Unterabfragen mit Vergleichsoperatoren. Eine Skalar-Unterabfrage gibt einen einzigen Wert zurück, z. B.:
GDP2006 > (SELECT MAX(GDP2005) FROM countries)
Für File-Geodatabases können die Funktionen AVG, COUNT, MIN, MAX und SUM nur in Skalar-Unterabfragen verwendet werden. - EXISTS-Prädikat, z. B.:
EXISTS (SELECT * FROM indep_countries WHERE COUNTRY_NAME = 'Mexico')
Operatoren
Folgende Liste enthält alle Abfrageoperatoren, die in File-Geodatabases, Shapefiles, Coverages und anderen dateibasierten Datenquellen unterstützt werden. Sie werden auch von Enterprise-Geodatabases unterstützt. Diese Datenquellen erfordern jedoch möglicherweise eine andere Syntax. Zusätzlich zu den unten aufgeführten Operatoren unterstützen Enterprise-Geodatabases weitere Optionen. Informationen hierzu finden Sie in der RDBMS-Dokumentation.
Arithmetische Operatoren
Arithmetische Operatoren werden zum Addieren, Subtrahieren, Multiplizieren und Dividieren von numerischen Werten verwendet.
Operator | Beschreibung |
---|---|
* | Arithmetischer Operator für die Multiplikation |
/ | Arithmetischer Operator für die Division |
+ | Arithmetischer Operator für die Addition |
- | Arithmetischer Operator für die Subtraktion |
Vergleichsoperatoren
Vergleichsoperatoren werden zum Vergleichen eines Ausdrucks mit einem anderen verwendet.
Operator | Beschreibung |
---|---|
< | Das Kleiner-als-Zeichen Es kann mit Zeichenfolgen (Vergleich beruht dann auf der alphabetischen Reihenfolge), Zahlen und Datumsangaben verwendet werden. |
<= | Das Kleiner-gleich-Zeichen Es kann mit Zeichenfolgen (Vergleich beruht dann auf der alphabetischen Reihenfolge), Zahlen und Datumsangaben verwendet werden. |
<> | Das Ungleich-Zeichen Es kann mit Zeichenfolgen (Vergleich beruht dann auf der alphabetischen Reihenfolge), Zahlen und Datumsangaben verwendet werden. |
> | Das Größer-als-Zeichen Es kann mit Zeichenfolgen (Vergleich beruht dann auf der alphabetischen Reihenfolge), Zahlen und Datumsangaben verwendet werden. |
>= | Das Größer-gleich-Zeichen Es kann mit Zeichenfolgen (Vergleich beruht dann auf der alphabetischen Reihenfolge), Zahlen und Datumsangaben verwendet werden. |
IS [NOT] NULL | Hiermit wird ein Datensatz ausgewählt, der einen NULL-Wert für das angegebene Feld aufweist. Wenn NULL nach NOT steht, wird ein Datensatz mit einem beliebigen Wert im angegebenen Feld ausgewählt. |
Logische Operatoren
Ähnlich wie Vergleichsoperatoren testen logische Operatoren die Wahrheit der Anweisung und geben Werte zurück, die für die gegebene Anweisung wahr sind.
Operator | Beschreibung |
---|---|
AND | Hiermit werden zwei Bedingungen kombiniert. Wenn beide zutreffen, wird ein Datensatz ausgewählt. Wenn Sie beispielsweise ein beliebiges Haus mit mehr als 1.500 Quadratfuß und einer Garage für mehr als zwei Autos auswählen möchten, verwenden Sie folgenden Ausdruck: AREA > 1500 AND GARAGE > 2 |
[NOT] BETWEEN x AND y | Mit diesem Ausdruck wird ein Datensatz ausgewählt, der einen Wert größer oder gleich x und kleiner oder gleich y aufweist. Wenn dem Ausdruck NOT vorangestellt ist, wird ein Datensatz mit einem Wert außerhalb des angegebenen Bereichs ausgewählt. Mit diesem Ausdruck werden z. B. alle Datensätze mit einem Wert größer oder gleich 1 und kleiner oder gleich 10 ausgewählt: OBJECTID BETWEEN 1 AND 10 Dies entspricht dem folgenden Ausdruck: OBJECTID >= 1 AND OBJECTID <= 10 Der Ausdruck mit BETWEEN ist jedoch besser geeignet, wenn Sie ein indiziertes Feld abfragen. |
[NOT] EXISTS | Gibt TRUE zurück, wenn die Unterabfrage mindestens einen Datensatz enthält; andernfalls wird FALSE zurückgegeben. Der folgende Ausdruck gibt beispielsweise TRUE zurück, wenn das Feld OBJECTID einen Wert von 50 enthält: EXISTS (SELECT * FROM parcels WHERE OBJECTID = 50) Der Operator EXISTS wird nur in File- und Enterprise-Geodatabases unterstützt. |
[NOT] IN | Hiermit wird ein Datensatz ausgewählt, der eine von mehreren Zeichenfolgen in einem Feld aufweist. Wenn dem Ausdruck NOT vorangestellt ist, wird ein Datensatz ausgewählt, der in keinem Feld die angegebenen Zeichenfolgen bzw. Werte aufweist. Mit dem folgenden Ausdruck wird beispielsweise nach vier Namen von Bundesstaaten gesucht: STATE_NAME IN ('Alabama', 'Alaska', 'California', 'Florida') |
x [NOT] LIKE y [ESCAPE 'Escape-Zeichen'] | Um nach einer Teilzeichenfolge zu suchen, verwenden Sie den Operator LIKE (anstelle des Operators "Gleich") mit Platzhaltern. Das Prozentzeichen (%) kann für eine beliebige Anzahl von Zeichen oder kein Zeichen stehen. Um bei der Suche ein Platzhalterzeichen zu verwenden, das für ein einzelnes Zeichen steht, verwenden Sie einen Unterstrich (_). Mit der Funktion CAST können Sie auf Daten zugreifen, die keine Zeichendaten darstellen. Diese Abfrage gibt beispielsweise Zahlen aus dem Feld SCORE_INT zurück, die mit 8 beginnen: CAST (SCORE_INT AS VARCHAR(10)) LIKE '8%' Soll die Suchzeichenfolge ein Prozentzeichen oder einen Unterstrich enthalten, bestimmen Sie mit dem Schlüsselwort "ESCAPE" ein anderes Zeichen als das Escape-Zeichen. Dadurch wird angegeben, dass ein echtes Prozentzeichen oder ein echter Unterstrich unmittelbar folgt. Dieser Ausdruck gibt beispielsweise alle Zeichenfolgen mit "10 %" wie "10 % RABATT" oder "A10 %" zurück. AMOUNT LIKE '%10$%%' ESCAPE '$' |
NOT | Hiermit wird ein Datensatz ausgewählt, der nicht mit dem Ausdruck übereinstimmt. Mit folgendem Ausdruck werden beispielsweise alle US-amerikanischen Bundesstaaten außer Kalifornien ausgewählt: NOT STATE_NAME = 'California' |
OR | Hiermit werden zwei Bedingungen kombiniert. Wenn mindestens eine zutrifft, wird ein Datensatz ausgewählt. Wenn Sie beispielsweise ein beliebiges Haus mit mehr als 1.500 Quadratfuß oder einer Garage für mehr als zwei Autos auswählen möchten, verwenden Sie folgenden Ausdruck: AREA > 1500 OR GARAGE > 2 |
Operatoren für Zeichenfolgen
Operator | Beschreibung |
---|---|
|| | Eine Zeichenfolge zurückgeben, die das Ergebnis der Verkettung von mindestens zwei Zeichenfolgenausdrücken ist. FIRST_NAME || MIDDLE_NAME || LAST_NAME |
Funktionen
Im Folgenden finden Sie eine vollständige Liste der Funktionen, die von File-Geodatabases, Shapefiles, Coverages und anderen dateibasierten Datenquellen unterstützt werden. Die Funktionen werden auch von Enterprise-Geodatabases unterstützt. Diese Datenquellen erfordern jedoch möglicherweise eine andere Syntax oder andere Funktionsnamen. Zusätzlich zu den unten aufgeführten Funktionen unterstützen Enterprise-Geodatabases weitere Optionen. Informationen hierzu finden Sie in der RDBMS-Dokumentation.
Datumsfunktionen
Alle Datumsfunktionen geben einen Datumswert zurück.
File-Geodatabases
Funktion | Beschreibung |
---|---|
CURRENT_DATE | Das aktuelle Datum wird zurückgegeben. |
EXTRACT(extract_field FROM extract_source) | Liefert als Rückgabe den extract_field-Teil von extract_source. Beim extract_source-Argument handelt es sich um einen Datums-/Uhrzeitausdruck (DATE, DateOnly, TimeOnly, TimestampOffset). Beim extract_field-Argument kann es sich um eines der folgenden Schlüsselwörter handeln: YEAR, MONTH, DAY, HOUR, MINUTE oder SECOND, MILLISECOND, TIMEZONE_HOUR, TIMEZONE_MINUTE. |
CURRENT TIME | Gibt die aktuelle Uhrzeit zurück. |
EXTRACT-Verwendungsbeispiele für File-Geodatabases
- EXTRACT(YEAR from DateOnly) > 1951
- EXTRACT(YEAR from DateTimestamp) > 1981
- EXTRACT(YEAR from TimestampOffset) > 1981
- EXTRACT(TIMEZONE_HOUR from timeStampOffset) > 3
- EXTRACT(TIMEZONE_MINUTE from timeStampOffset) = 30
Mobile-Geodatabases
Funktion | Beschreibung |
---|---|
CURRENT_DATE | Das aktuelle Datum wird zurückgegeben. |
EXTRACT(extract_field, extract_source) | Liefert als Rückgabe den extract_field-Teil von extract_source. Beim extract_source-Argument handelt es sich um einen Datums-/Uhrzeitausdruck (DATE, DateOnly, TimeOnly, TimestampOffset). Beim extract_field-Argument kann es sich um eines der folgenden Schlüsselwörter handeln: YEAR, MONTH, DAY, HOUR, MINUTE oder SECOND, MILLISECOND, TIMEZONE_HOUR, TIMEZONE_MINUTE. |
CURRENT TIME | Gibt die aktuelle Uhrzeit zurück. |
EXTRACT-Verwendungsbeispiele für mobile Geodatabases
- EXTRACT('YEAR', DateOnly) > 1951
- EXTRACT('YEAR', DateTimestamp) > 1981
- EXTRACT('YEAR', TimestampOffset) > 1981
- EXTRACT('TIMEZONE_HOUR', timeStampOffset) > 3
- EXTRACT('TIMEZONE_MINUTE', timeStampOffset) = 30
Zeichenfolgenfunktion
Bei den Argumenten, die als string_exp aufgeführt sind, kann es sich um den Namen einer Spalte, ein Zeichenfolgenliteral oder das Ergebnis einer anderen Skalarfunktion handeln, in der der zugrunde liegende Datentyp als Zeichentyp dargestellt werden kann.
Bei Argumenten, die als character_exp aufgeführt sind, handelt es sich um Zeichenfolgen mit variabler Länge.
Bei Argumenten, die als start oder length aufgeführt sind, kann es sich um ein numerisches Literal oder das Ergebnis einer anderen Skalarfunktion handeln, wobei der zugrunde liegende Datentyp einen numerischen Typ darstellen kann.
Diese Zeichenfolge-Funktionen basieren auf 1, d. h., beim ersten Zeichen der Zeichenfolge handelt es sich um das Zeichen 1.
Funktion | Beschreibung |
---|---|
CHAR_LENGTH(string_exp) | Gibt die Länge des String-Ausdrucks in Zeichen zurück. |
LOWER(string_exp) | Gibt eine Zeichenfolge zurück, der mit string_exp identisch ist und in dem alle Großbuchstaben in Kleinbuchstaben konvertiert wurden. |
POSITION(character_exp IN character_exp) | Gibt die Position des ersten Zeichenausdrucks im zweiten Zeichenausdruck zurück. Das Ergebnis ist eine genaue Zahl mit einer implementationsdefinierten Genauigkeit und der Anzahl der Dezimalstellen von 0. |
SUBSTRING(string_exp FROM start FOR length) | Gibt eine aus string_exp abgeleitete Zeichenfolge zurück. Diese Zeichenfolge beginnt an der durch start festgelegten Zeichenposition und weist eine Länge von length Zeichen auf. |
TRIM(BOTH | LEADING | TRAILING trim_character FROM string_exp) | Gibt string_exp zurück, wobei trim_character von den führenden, nachstehenden oder beiden Enden der Zeichenfolge entfernt wurde. |
UPPER(string_exp) | Gibt eine Zeichenfolge zurück, die mit string_exp identisch ist und in der alle Kleinbuchstaben in Großbuchstaben konvertiert wurden. |
Numerische Funktionen
Bei allen Zahlenfunktionen wird ein numerischer Wert zurückgegeben.
Bei den Argumenten, die als numeric_exp, float_exp oder integer_exp aufgeführt sind, kann es sich um einen Namen einer Spalte, das Ergebnis einer anderen Skalarfunktion oder ein numerisches Literal handeln, wobei der zugrunde liegende Datentyp als numerischer Typ dargestellt werden kann.
Funktion | Beschreibung |
---|---|
ABS(numeric_exp) | Gibt den absoluten Wert von numeric_exp zurück. |
ACOS(float_exp) | Gibt den Arkuskosinus von float_exp als Winkel, ausgedrückt in Radianten, zurück. |
ASIN(float_exp) | Gibt den Arkussinus von float_exp als Winkel, ausgedrückt in Radianten, zurück. |
ATAN(float_exp) | Gibt den Arkustangens von float_exp als Winkel, ausgedrückt in Radianten, zurück. |
CEILING(numeric_exp) | Gibt den kleinsten Integer-Wert zurück, der größer als oder gleich numeric_exp ist. |
COS(float_exp) | Gibt den Kosinus von float_exp zurück, wobei float_exp ein in Radianten ausgedrückter Winkel ist. |
FLOOR(numeric_exp) | Gibt den größten Integer-Wert, der kleiner als oder gleich numeric_exp ist, zurück. |
LOG(float_exp) | Gibt den natürlichen Logarithmus von float_exp zurück. |
LOG10(float_exp) | Gibt den Logarithmus zur Basis 10 von float_exp zurück. |
MOD(integer_exp1, integer_exp2) | Gibt den Rest von integer_exp1 dividiert durch integer_exp2 zurück. |
POWER(numeric_exp, integer_exp) | Gibt den Wert von numeric_exp potenziert mit integer_exp zurück. |
ROUND(numeric_exp, integer_exp) | Gibt numeric_exp auf integer_exp Stellen rechts neben dem Dezimaltrennzeichen aufgerundet zurück. Wenn integer_exp negativ ist, wird numeric_exp auf |integer_exp| Stellen links neben dem Dezimaltrennzeichen gerundet. |
SIGN(numeric_exp) | Gibt einen Indikator des Vorzeichens von numeric_exp zurück. Wenn numeric_exp kleiner als Null ist, wird "-1" zurückgegeben. Wenn numeric_exp gleich Null ist, wird 0 zurückgegeben. Wenn numeric_exp größer als Null ist, wird "1" zurückgegeben. |
SIN(float_exp) | Gibt den Sinus von float_exp zurück, wobei float_exp ein in Radianten ausgedrückter Winkel ist. |
TAN(float_exp) | Gibt den Tangens von float_exp zurück, wobei float_exp ein in Radianten ausgedrückter Winkel ist. |
TRUNCATE(numeric_exp, integer_exp) | Gibt numeric_exp auf integer_exp Stellen rechts neben dem Dezimaltrennzeichen verkürzt zurück. Wenn integer_exp negativ ist, wird numeric_exp auf |integer_exp| Stellen links neben dem Dezimaltrennzeichen abgeschnitten. |
Funktion "CAST"
Die Funktion CAST() konvertiert einen Wert oder Ausdruck aus einem Datentyp in einen anderen angegebenen Datentyp. Folgende Syntax wird verwendet:
CAST (expression AS data_type(length))
- Dabei ist expression ein erforderlicher Parameter, bei dem es sich um einen Literalwert oder einen gültigen Ausdruck eines beliebigen Typs (z. B. Spaltenname oder Variable) handeln kann, der konvertiert wird.
- Dabei ist data_type ein erforderlicher Parameter, und das verwendete Schlüsselwort ist der resultierende Datentyp, in den der Ausdruck umgewandelt wird. In der nachstehenden Tabelle finden Sie eine Liste der Schlüsselwörter, die für gültige Datentypen verwendet werden können.
- Dabei ist length ein optionaler Parameter, der die Länge des resultierenden Datentyps angibt.
Beispielsweise kann in bestimmten Szenarien eine Zeichenfolgeoperation notwendig sein, aber wenn die Daten in einem Feld eines Zahlentyps gespeichert sind, funktioniert die Abfrage nicht. Sie können jedoch mit der Funktion "CAST()" das Zahlenfeld in eine Zeichenfolge für eine SQL-Operation umwandeln. Mit diesem Code wird das Zahlenfeld SQLNUM in ein Textfeld umgewandelt, das anschließend in einer Zeichenfolgeoperation verwendet werden kann.
CAST(SQLNUM AS CHARACTER(12))
Die folgende Tabelle enthält die Schlüsselwörter, die für Datentypkonvertierungen verwendet werden können. Sie können in Groß- oder Kleinbuchstaben angegeben werden.
Datentyp | Schlüsselwort |
---|---|
Long Integer |
|
Short Integer |
|
"Float" (Gleitkommazahl mit einfacher Genauigkeit) |
|
"Double" (Gleitkommazahl mit doppelter Genauigkeit) |
|
Zeichenfolge |
|
Datum/Uhrzeit |
|
Hinweis:
|
Beispiele für die Funktion CAST
- Beispiel 1:
CAST(AREA AS INTEGER)
Die Umwandlung von "AREA" (Datentyp "Float") in "INTEGER" gibt eine ganze Zahl zurück. Alle Ergebniswerte werden nach dem Dezimalzeichen abgeschnitten.
- Beispiel 2:
CAST(Rent AS FLOAT) + Utilities > 2000.45
"Rent" (Datentyp "CHARACTER") wird in den Datentyp "FLOAT" umgewandelt, wobei "Utilities" ebenfalls den Datentyp "FLOAT" aufweist.
EsriCast
Die SQLite-Operatoren CAST arbeiten mit nativen Datentypen. Mit der Veröffentlichung neuer Feldtypen sowie anderer eher systemfremder Datentypen müssen Sie die Operatoren für SQLite jedoch anpassen, damit sie ordnungsgemäß funktionieren. EsriCast wurde entwickelt, damit die in mobilen Geodatabases notwendigen SQLite-Operatoren auf die verschiedenen Datentypen, mit denen ArcGIS AllSource arbeiten kann, zugreifen und sie verstehen können.
Beispielsyntax: EsriCast(expression, source_data_type, target_data_type)
EsriCast-Datenschlüsselwörter
Datentyp | EsriCast-Schlüsselwort |
---|---|
Short | Int16 |
Long | Int32 |
Große Ganzzahl | Int64 |
Float | Float32 |
Double | Float64 |
Nur Datum | DateOnly |
Nur Zeit | TimeOnly |
Datum/Uhrzeit-Versatz | Zeitstempel |
Datum/Uhrzeit | Datum |
Text | Text |
EsriCast-Beispiele für die Datenkonvertierung
Datentyp in Datentyp | EsriCast-Syntax |
---|---|
Short in Long | EsriCast(FC_Short_Data,'int16','int32') |
Big Integer in Short | EsriCast(FC_BigInteger_Data, 'int64', 'int16') |
Float in Double | EsriCast(FC_Float_Data, 'float32', 'float64') |
Datum/Uhrzeit in Nur Datum | EsriCast(FC_DateTime_Data, 'date', 'dateonly') |
Nur Zeit in Zeitstempelversatz | EsriCast(FC_TimeOnly_Data, 'timeonly', 'timestamp') |
Text in Short | EsriCast(FC_Text_Data, 'text', 'int16') |