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ção
    SELECT
    para 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 conjunto
    ALL
    e
    DISTINCT
    .
    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 Table1
    OBSERVAÇÃO: As expressões
    CASE
    e
    WHEN
    não são compatíveis.
    IMPORTANTE:
    O padrão SQL não permite a combinação
    *
    com colunas derivadas.
    SELECT *, Timestamp FROM Table1
    SELECT *, ROW_NUMBER() OVER (ORDER BY Timestamp) FROM DataLogger
    O
    FactoryTalk Optix
    é compatível com esse padrão para permitir qualquer manipulação de consulta para minigráficos.
  • Use a instrução
    DELETE
    para 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ção
    UPDATE
    para 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ção
    CREATE
    para criar tabelas ou tabelas em bancos de dados. Essa instrução é parcialmente compatível com
    TABLE
    e
    INDEX
    .
    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 > 5
    CREATE TEMPORARY TABLE Table2 AS SELECT Column1 FROM Table1 WHERE Column1 > 5 CREATE UNIQUE INDEX Column1_Index ON Table1 (Column1) DROP TABLE Table1
  • A instrução
    DROP
    descarta quaisquer bancos de dados ou tabelas existentes em bancos de dados.
    Exemplos:
    DROP TABLE TemporaryTable DROP TABLE Table1

Valores literais

Valores literais compatíveis
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
  • true
  • false
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
  • Column1
  • Grüße
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
  • "Water level"
  • "SELECT"
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ências de tabelas compatíveis
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

Operadores compatíveis
Operador
Exemplo
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
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ções de janela compatíveis
Função
Exemplo
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)
OBSERVAÇÃO: A cláusula
PARTITION BY
é compatível apenas com identificadores de coluna.

Tokens

Tokens compatíveis
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
Tem dúvidas ou comentários sobre esta documentação? Por favor, envie seu comentário aqui.