Consultas SQL
SQL (Structured Query Language) gerencia dados armazenados em bancos de dados relacionais por meio de instruções simples e declarativas. Use o padrão ANSI SQL-92 para consultar bancos de dados ODBC e bancos de dados embutidos.
Gramática SQL
O analisador SQL de cima para baixo é baseado em uma versão simplificada da gramática SQL padrão porque:
- O FactoryTalk Optix oferece suporte a apenas um subconjunto de SQL padrão.
- A gramática SQL padrão simplificada se ajusta melhor à implementação do analisador de cima para baixo.
- A gramática SQL padrão simplificada facilita a legibilidade do AST resultante.
Declarações
O
FactoryTalk Optix Studio
suporta estas declarações em consultas SQL:- Use a instruçãoSELECTpara selecionar dados de um banco de dados. Essa instrução é compatível com nomes de coluna e expressões de valor, bem como com os quantificadores de conjuntoALLeDISTINCT.Exemplos: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 Table1OBSERVAÇÃO: As expressõesCASEeWHENnão são compatíveis.IMPORTANTE:O padrão SQL não permite a combinação*com colunas derivadas.SELECT *, Timestamp FROM Table1SELECT *, ROW_NUMBER() OVER (ORDER BY Timestamp) FROM DataLoggerOFactoryTalk Optixé compatível com esse padrão para permitir qualquer manipulação de consulta para minigráficos.
- Use a instruçãoDELETEpara excluir quaisquer registros existentes em uma tabela.Exemplos:SELECT * FROM Table1 WHERE ... DELETE FROM Table1 WHERE ... UPDATE Table1 SET column1 = 10 WHERE column2 > 20 ...
- Use a instruçãoUPDATEpara modificar quaisquer registros existentes em uma tabela.Exemplos:SELECT * FROM Table1 WHERE ... DELETE FROM Table1 WHERE ... UPDATE Table1 SET column1 = 10 WHERE column2 > 20 ...
O
FactoryTalk Optix Studio
suporta parcialmente estas declarações em consultas SQL:- Use a instruçãoCREATEpara criar tabelas ou tabelas em bancos de dados. Essa instrução é parcialmente compatível comTABLEeINDEX.Exemplos: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
- A instruçãoDROPdescarta quaisquer bancos de dados ou tabelas existentes em bancos de dados.Exemplos:DROP TABLE TemporaryTable DROP TABLE Table1
Valores literais
Tipo de valor literal | Exemplo | Observações |
---|---|---|
Integral | 1520 | Não use separadores de milhar. Use o tipo Int32. |
Real | 15.025 | Use . como separador de decimal.Use o tipo Double. |
Real científico | 2.7000001072883606E-1 | |
Boolean |
| Use letras minúsculas para valores Boolianos. |
String | 'string value' | Use aspas simples para delimitar o texto. Insira aspa simples ( ' ) para abrir e fechar um segmento em uma string de texto. Por exemplo, para gravar 'string' , use duas aspas simples ''string'' nas strings. |
Data e hora | "2004-05-23T14:25:10.487" | Use o formato ISO8601 delimitado por aspas duplas. A notação de data e hora é um SQL ANSI não padrão, usado para evitar a ambiguidade das palavras-chave DATE , TIME e TIMESTAMP . |
Identificador regular |
| Não use espaços. Comece com uma letra maiúscula ou minúscula. Você pode usar dígitos numéricos, letras e o caractere _ (sublinhado). |
Identificador delimitado |
| Use aspas duplas ( " ) como delimitador.No identificador, use qualquer caractere exceto o caractere " .Todos os espaços no final do identificador serão ignorados. |
Junções
Qualquer tipo de junção, como
INNER
, UNION
, LEFT
, RIGHT
, FULL
, NATURAL
e CROSS
, são compatíveis.
OBSERVAÇÃO:
Algumas junções não são totalmente compatíveis por todos os SGBD.
Aliases
Você pode usar aliases nos identificadores, subconsultas de coluna derivadas e tabelas.
Veja abaixo, exemplos de consultas com aliases:
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
Referências de tabelas
A cláusula
FROM
é compatível com as seguintes referências de tabela.Referência | Exemplo |
---|---|
Referência totalmente qualificada | ... FROM table_name ... FROM schema_name.table_name ... FROM database_name.schema.name.table_name |
Subconsulta | ... FROM (SELECT * FROM Table2) WHERE ... |
OBSERVAÇÃO:
Nomes totalmente qualificados também são compatíveis como referências de coluna.
Exemplos:
... 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
Operadores
Operador | Exemplo |
---|---|
IN |
|
BETWEEN |
|
LIKE |
|
EXISTS |
|
IS |
|
NOT |
O operador NOT se aplica a todos os outros operadores. |
OBSERVAÇÃO:
Os operadores
ANY
e ALL
não são compatíveis.Funções de janela
Função | Exemplo |
---|---|
ROW_NUMBER |
|
RANK |
|
DENSE_RANK |
|
AVG |
|
SUM , MIN , MAX |
|
COUNT |
|
OBSERVAÇÃO:
A cláusula
PARTITION BY
é compatível apenas com identificadores de coluna.Tokens
Token | Expressão regular |
---|---|
regular_identifier | [a-zA-Z][a-zA-Z0-9_]* |
delimited_identifier | ".*?" |
real | |
boolean | |
Outros tokens triviais | Regex para tokens de um caractere ou uma palavra |
OBSERVAÇÃO:
O léxico não reconhece valores de data e hora como tokens: eles são analisados como
delimited_identifier
. O analisador semântico extrai quaisquer valores de data e hora de delimited_identifier
de acordo com a expressão regular r
.Dê sua opinião