SQL-Abfragen

SQL („Structured Query Language“) verwaltet in relationalen Datenbanken gespeicherte Daten durch einfache, deklarative Anweisungen. Verwenden Sie den ANSI SQL-92-Standard für die Abfrage von ODBC-Datenbanken und eingebetteten Datenbanken.

SQL-Grammatik

Der Top-Down-SQL-Parser basiert auf einer vereinfachten Version der Standard-SQL-Grammatik, denn:
  • FactoryTalk Optix unterstützt nur eine Teilgruppe von Standard-SQL.
  • Die vereinfachte Standard-SQL-Grammatik eignet sich am besten für die Top-Down-Parser-Implementierung.
  • Die vereinfachte Standard-SQL-Grammatik erleichtert die Lesbarkeit des resultierenden AST.

Anweisungen

TIPP: Schreiben Sie Spaltennamen mit Sonderzeichen auf diese Weise:
SELECT MAX(
"/Variable1"
) FROM mystore.recipeschema1;
FactoryTalk Optix Studio
unterstützt diese Anweisungen in SQL-Abfragen:
  • Verwenden Sie die
    SELECT
    -Anweisung, um Daten aus einer Datenbank auszuwählen. Diese Anweisung unterstützt sowohl Spaltennamen und Wertausdrücke als auch die Mengenquantifizierer
    ALL
    und
    DISTINCT
    .
    Beispiele:
    SELECT *, FROM Table1 SELECT *, Timestamp AS T FROM Table1 SELECT Column1 FROM Table1 SELECT *, 10 FROM Table1 SELECT 10, * FROM Table1 SELECT *, 'text value' FROM Table1 SELECT COUNT(*) FROM Table1 SELECT DINSTINCT Column1 FROM Table1
    NOTIZ: Die Ausdrücke
    CASE
    und
    WHEN
    werden nicht unterstützt.
    WICHTIG:
    Der SQL-Standard erlaubt keine Kombination von
    *
    mit abgeleiteten Spalten.
    SELECT *, Timestamp FROM Table1
    SELECT *, ROW_NUMBER() OVER (ORDER BY Timestamp) FROM DataLogger
    FactoryTalk Optix
    unterstützt diesen Standard, um jede Abfragemanipulation für Sparkline-Diagramme zu ermöglichen.
  • Verwenden Sie die
    DELETE
    -Anweisung, um vorhandene Datensätze in einer Tabelle zu löschen.
    Beispiele:
    SELECT * FROM Table1 WHERE ... DELETE FROM Table1 WHERE ... UPDATE Table1 SET column1 = 10 WHERE column2 > 20 ...
  • Verwenden Sie die
    UPDATE
    -Anweisung, um vorhandene Datensätze in einer Tabelle zu ändern.
    Beispiele:
    SELECT * FROM Table1 WHERE ... DELETE FROM Table1 WHERE ... UPDATE Table1 SET column1 = 10 WHERE column2 > 20 ...
FactoryTalk Optix Studio
unterstützt diese Anweisungen in SQL-Abfragen teilweise:
  • Verwenden Sie die
    CREATE
    -Anweisung, um Tabellen oder Tabellen in Datenbanken zu erstellen. Diese Anweisung unterstützt teilweise
    TABLE
    und
    INDEX
    .
    Beispiele:
    CREATE UNIQUE INDEX Table_Index ON Table1 (Column1) CREATE INDEX IF NOT EXISTS Table_Index ON Table1 (Column1)
    CREATE TABLE TempTable AS SELECT Column1 FROM MyTable WHERE Column1 > 5 CREATE TEMPORARY TABLE TempTable AS SELECT Column1 FROM MyTable WHERE Column1 > 5
    CREATE TEMPORARY TABLE Table2 AS SELECT Column1 FROM Table1 WHERE Column1 > 5 CREATE UNIQUE INDEX Column1_Index ON Table1 (Column1) DROP TABLE Table1
  • Die
    DROP
    -Anweisung löscht vorhandene Datenbanken oder Tabellen in Datenbanken.
    Beispiele:
    DROP TABLE TemporaryTable DROP TABLE Table1

Literale Werte

Unterstützte literalen Werte
Literaler Werttyp
Beispiel
Hinweise
Integral
1520
Verwenden Sie keine Tausendertrennzeichen.
Verwenden Sie den Typ Int32.
Real
15.025
Verwenden Sie
.
als Dezimaltrennzeichen.
Verwenden Sie den Typ Doppel.
Real wissenschaftlich
2.7000001072883606E-1
Boolesch
  • true
  • false
Verwenden Sie Kleinbuchstaben für boolesche Werte.
Zeichenfolge
'string value'
Verwenden Sie einzelne Anführungszeichen zur Abgrenzung von Text.
Fügen Sie ein einzelnes Anführungszeichen (
'
) in eine Textzeichenfolge ein, indem Sie das einzelne Anführungszeichen durch ein weiteres einzelnes Anführungszeichen escapen. Um zum Beispiel
'string'
zu schreiben, verwenden Sie zwei einfache Anführungszeichen
''string''
in den Zeichenfolgen.
Datum und Uhrzeit
"2004-05-23T14:25:10.487"
Verwenden Sie das ISO8601-Format, das durch doppelte Anführungszeichen begrenzt ist.
Bei der Datums- und Zeitschreibweise handelt es sich um nicht standardisiertes ANSI-SQL, das verwendet wird, um die Schlüsselwörter
DATE
,
TIME
und
TIMESTAMP
unmissverständlich zu vermeiden.
Regulärer Bezeichner
  • Column1
  • Grüße
Verwenden Sie keine Leerzeichen.
Beginnen Sie mit einem Großbuchstaben oder einem Kleinbuchstaben.
Sie können numerische Ziffern, Buchstaben und den Unterstrich
_
verwenden.
Begrenzter Bezeichner
  • "Water level"
  • "SELECT"
Verwenden Sie doppelte Anführungszeichen (
"
) als Trennzeichen.
Verwenden Sie im Bezeichner beliebige Zeichen außer dem Zeichen
"
.
Etwaige Leerzeichen am Ende des Bezeichners werden ignoriert.

Join

Alle Arten von Joins wie
INNER
,
UNION
,
LEFT
,
RIGHT
,
FULL
,
NATURAL
und
CROSS
werden unterstützt.
NOTIZ: Einige Joins werden nicht von jedem DBMS vollständig unterstützt.

Aliasse

Sie können Aliase in den Bezeichnern, abgeleiteten Spaltenunterabfragen und Tabellen verwenden.
Im Folgenden finden Sie Beispiele für Abfragen mit Aliasen:
SELECT Timestamp AS T FROM Table1 WHERE ...
SELECT * FROM Table1 AS T WHERE ...
SELECT * FROM (SELECT * FROM Table1) AS SubQuery WHERE ...
CREATE TABLE Table1 AS SELECT Timestamp, Column1 FROM Table2

Tabellenreferenzen

Die
FROM
-Klausel unterstützt die folgenden Tabellenreferenzen.
Unterstützte Tabellenreferenzen
Referenz
Beispiel
Vollständig qualifizierter Verweis
... FROM table_name
... FROM schema_name.table_name
... FROM database_name.schema.name.table_name
Unterabfrage
... FROM (SELECT * FROM Table2) WHERE ...
NOTIZ: Vollständig qualifizierte Namen werden auch als Spaltenreferenzen unterstützt.
Beispiele:
... WHERE Table1.Column1 > 10... WHERE Table1."order id" > 10 SELECT * FROM Table1 AS T WHERE T."order id" > 10 ... WHERE "my table"."order id" > 10

Operatoren

Unterstützte Operatoren
Operator
Beispiel
IN
SELECT * FROM Table1 WHERE Column1 IN (10, 20, 30)
BETWEEN
SELECT * FROM Table1 WHERE Column1 BETWEEN 100 AND 200
LIKE
... WHERE column1 LIKE '%a'
... WHERE column1 LIKE '%a%'
... WHERE column1 LIKE '%bbpi!%ppo%' ESCAPE '!'
EXISTS
... WHERE EXISTS (SELECT Table1.Column1 FROM Table2)
IS
... WHERE column1 IS NULL
NOT
... WHERE column1 IS NOT NULL
... WHERE column1 NOT IS (10, 20)
... WHERE column1 NOT BETWEEN 100 AND 200
Der Operator
NOT
gilt für alle anderen Operatoren.
NOTIZ: Die Operatoren
ANY
und
ALL
werden nicht unterstützt.

Fensterfunktionen

Unterstützte Fensterfunktionen
Funktion
Beispiel
ROW_NUMBER
ROW_NUMBER() OVER (ORDER BY Column2)
ROW_NUMBER() OVER (PARTITION ON Column1 ORDER BY Column2)
ROW_NUMBER() OVER (window_name PARTITION ON Column1 ORDER BY Column2)
RANK
RANK() OVER (PARTITION ON Column1 ORDER BY Column2)
DENSE_RANK
DENSE_RANK() OVER (PARTITION ON Column1 ORDER BY Column2)
AVG
AVG(Column1) OVER (PARTITION BY Column2)
SUM
,
MIN
,
MAX
SUM(Column1) OVER (PARTITION BY Column2)
COUNT
COUNT(Column1) OVER (PARTITION BY Column2)
COUNT(*) OVER (PARTITION BY Column2)
NOTIZ: Die
PARTITION BY
-Klausel unterstützt nur IDs von Spalten.

Token

Unterstützte Token
Token
Regulärer Ausdruck
regular_identifier
[a-zA-Z][a-zA-Z0-9_]*
delimited_identifier
".*?"
real
boolean
Andere triviale Token
Regex für einzelne Zeichen oder Einzelwort-Token
NOTIZ: Der Lexer erkennt Datums- und Zeitwerte nicht als Token: Sie werden als
delimited_identifier
geparst. Der semantische Analysator extrahiert alle Datums- und Zeitwerte aus
delimited_identifier
entsprechend dem regulären Ausdruck
r
.
Rückmeldung geben
Haben Sie Fragen oder Feedback zu dieser Dokumentation? Bitte geben Sie hier Ihr Feedback ab.