Query SQL
SQL (Structured Query Language) gestisce i dati memorizzati nei database relazionali attraverso semplici istruzioni dichiarative. Utilizzare lo standard ANSI SQL-92 per la query su database ODBC e database interni.
Grammatica SQL
Il parser SQL top-down si basa su una versione semplificata della grammatica SQL standard perché:
- FactoryTalk Optix supporta solo un sottogruppo di SQL standard.
- La grammatica SQL standard semplificata si adatta meglio all'implementazione del parser top-down.
- La grammatica SQL standard semplificata facilita la leggibilità dell'AST risultante.
Istruzioni
SUGGERIMENTO:
Eseguire l'escape dei nomi delle colonne con caratteri speciali in questo modo:
SELECT MAX(
"/Variable1"
) FROM mystore.recipeschema1;FactoryTalk Optix Studio
supporta queste istruzioni in query SQL:- Utilizzare l'istruzioneSELECTper selezionare dati da un database. Questa istruzione supporta sia i nomi di colonna che le espressioni di valore, nonché i quantificatori di insiemiALLeDISTINCT.Esempi: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 Table1NOTA: Le espressioniCASEeWHENnon sono supportate.IMPORTANTE:Lo standard SQL non consente la combinazione di*con colonne derivate.SELECT *, Timestamp FROM Table1SELECT *, ROW_NUMBER() OVER (ORDER BY Timestamp) FROM DataLoggerFactoryTalk Optixsupporta questo standard per consentire qualsiasi manipolazione delle query per i grafici sparkline.
- Utilizzare l'istruzioneDELETEper eliminare tutti i record esistenti in una tabella.Esempi:SELECT * FROM Table1 WHERE ... DELETE FROM Table1 WHERE ... UPDATE Table1 SET column1 = 10 WHERE column2 > 20 ...
- Utilizzare l'istruzioneUPDATEper modificare tutti i record esistenti in una tabella.Esempi:SELECT * FROM Table1 WHERE ... DELETE FROM Table1 WHERE ... UPDATE Table1 SET column1 = 10 WHERE column2 > 20 ...
FactoryTalk Optix Studio
supporta parzialmente queste istruzioni in query SQL:- Utilizzare l'istruzioneCREATEper creare tabelle o tabelle nei database. Questa istruzione supporta parzialmenteTABLEeINDEX.Esempi: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 > 5CREATE TEMPORARY TABLE Table2 AS SELECT Column1 FROM Table1 WHERE Column1 > 5 CREATE UNIQUE INDEX Column1_Index ON Table1 (Column1) DROP TABLE Table1
- L'istruzioneDROPelimina tutti i database o le tabelle esistenti nei database.Esempi:DROP TABLE TemporaryTable DROP TABLE Table1
Valori letterali
Tipo di valore letterale | Esempio | Note |
---|---|---|
Integrale | 1520 | Non utilizzare separatori delle migliaia. Utilizzare il tipo Int32. |
Reale | 15.025 | Utilizzare . come separatore decimale.Utilizzare il tipo Doppio. |
Reale scientifica | 2.7000001072883606E-1 | |
Boolean |
| Usare caratteri minuscoli per valori booleani. |
Stringa | 'string value' | Utilizzare le virgolette singole per delimitare il testo. Inserire una virgoletta singola ( ' ) in una stringa di testo utilizzando un carattere di escape a virgoletta singola per una virgoletta singola. Ad esempio, per scrivere 'string' , usare due virgolette singole ''string'' nelle stringhe. |
Data e ora | "2004-05-23T14:25:10.487" | Utilizzare il formato ISO8601 delimitato da virgolette doppie. La notazione per data e ora è ANSI SQL non standard, utilizzata per evitare le parole chiave DATE , TIME e TIMESTAMP senza ambiguità. |
Identificatore regolare |
| Non usare spazi. Iniziare con una lettera maiuscola o minuscola. È possibile utilizzare cifre, lettere e il carattere di sottolineatura _ . |
Identificatore delimitato |
| Utilizzare virgolette doppie ( " ) come delimitatore.Nell'identificatore, utilizzare qualsiasi carattere, ad eccezione del carattere " .Eventuali spazi in coda dell'identificatore vengono ignorati. |
Join
È supportato qualsiasi tipo di join, ad esempio
INNER
, UNION
, LEFT
, RIGHT
, FULL
, NATURAL
e CROSS
.
NOTA:
Alcuni join non sono completamente supportati da tutti i DBMS.
Alias
È possibile usare alias negli identificatori, nelle sottoquery delle colonne derivate e nelle tabelle.
Di seguito sono riportati alcuni esempi di query con alias:
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
Riferimenti tabella
La clausola
FROM
supporta i riferimenti tabella riportati di seguito.Riferimento | Esempio |
---|---|
Riferimento completo | ... FROM table_name ... FROM schema_name.table_name ... FROM database_name.schema.name.table_name |
Sottoquery | ... FROM (SELECT * FROM Table2) WHERE ... |
NOTA:
I nomi pienamente qualificati sono supportati anche come riferimenti colonna.
Esempi:
... 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
Operatori
Operatore | Esempio |
---|---|
IN |
|
BETWEEN |
|
LIKE |
|
EXISTS |
|
IS |
|
NOT |
L'operatore NOT si applica a tutti gli altri operatori. |
NOTA:
Gli operatori
ANY
e ALL
non sono supportati.Funzioni della finestra
Funzione | Esempio |
---|---|
ROW_NUMBER |
|
RANK |
|
DENSE_RANK |
|
AVG |
|
SUM , MIN , MAX |
|
COUNT |
|
NOTA:
La clausola
PARTITION BY
supporta solo identificatori di colonna.Token
Token | Espressione regolare |
---|---|
regular_identifier | [a-zA-Z][a-zA-Z0-9_]* |
delimited_identifier | ".*?" |
real | |
boolean | |
Altri token facili | Espressione regolare per token a carattere singolo o a parola singola |
NOTA:
Il lexer non riconosce i valori di data e ora come token: vengono analizzati come
delimited_identifier
. L'analizzatore semantico estrae tutti i valori di data e ora dal delimited_identifier
in base all'espressione regolarer
.sql
query
Fornire un feedback