Consultas SQL

Consultas SQL

SQL (Structured Query Language) gestiona los datos almacenados en bases de datos relacionales a través de instrucciones simples y declarativas. Utilice el estándar ANSI SQL-92 para consultar bases de datos ODBC y bases de datos incrustadas.

Gramática SQL

El analizador descendente SQL se basa en una versión simplificada de la gramática SQL estándar porque:
  • FactoryTalk Optix solo admite un subconjunto de SQL estándar.
  • La gramática SQL estándar simplificada se ajusta mejor a la implementación del analizador descendente.
  • La gramática SQL estándar simplificada facilita la legibilidad del AST resultante.

Instrucciones

FactoryTalk Optix Studio
admite estas instrucciones en las consultas SQL:
  • Use la instrucción
    SELECT
    para seleccionar datos de una base de datos. Esta instrucción admite nombres de columna y expresiones de valor, así como los cuantificadores establecidos
    ALL
    y
    DISTINCT
    .
    Ejemplos:
    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
    OBSERVACIÓN: Las expresiones
    CASE
    y
    WHEN
    no son compatibles.
    IMPORTANTE:
    El estándar SQL no permite la combinación
    *
    con columnas derivadas.
    SELECT *, Timestamp FROM Table1
    SELECT *, ROW_NUMBER() OVER (ORDER BY Timestamp) FROM DataLogger
    FactoryTalk Optix
    admite este estándar para permitir cualquier manipulación de consultas para diagramas de minigráficos.
  • Use la instrucción
    DELETE
    para eliminar cualquier registro existente en una tabla.
    Ejemplos:
    SELECT * FROM Table1 WHERE ... DELETE FROM Table1 WHERE ... UPDATE Table1 SET column1 = 10 WHERE column2 > 20 ...
  • Use la instrucción
    UPDATE
    para modificar los registros existentes en una tabla.
    Ejemplos:
    SELECT * FROM Table1 WHERE ... DELETE FROM Table1 WHERE ... UPDATE Table1 SET column1 = 10 WHERE column2 > 20 ...
FactoryTalk Optix Studio
es parcialmente compatible con estas instrucciones en las consultas SQL:
  • Use la instrucción
    CREATE
    para crear tablas o tablas en bases de datos. Esta instrucción es parcialmente compatible con
    TABLE
    y
    INDEX
    .
    Ejemplos:
    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
  • La instrucción
    DROP
    quita las bases de datos o las tablas existentes en las bases de datos.
    Ejemplos:
    DROP TABLE TemporaryTable DROP TABLE Table1

Valores literales

Valores literales compatibles
Tipo de valor literal
Ejemplo
Notas
Integral
1520
No utilice separadores de miles.
Utilice el tipo Int32.
Real
15.025
Utilice
.
como separador decimal.
Use el tipo Doble.
Científicos reales
2.7000001072883606E-1
Boolean
  • true
  • false
Utilice minúsculas para los valores booleanos.
Cadena
'string value'
Utilice comillas simples para delimitar el texto.
Para insertar una comilla simple (
'
) en una cadena de texto, incluya un carácter de escape para la comilla simple con otra comilla simple. Por ejemplo, para escribir
'string'
, use dos comillas simples
''string''
en las cadenas.
Fecha y hora
"2004-05-23T14:25:10.487"
Use el formato de ISO8601 delimitado por comillas dobles.
La notación de fecha y hora no estándar es SQL ANSI estándar y se usa para evitar las palabras clave
DATE
,
TIME
y
TIMESTAMP
sin ambigüedad.
Identificador regular
  • Column1
  • Grüße
No utilice espacios.
Empieza con una letra en mayúscula o minúscula.
Puede contener dígitos numéricos, letras y el carácter de subrayado
_
.
Identificador delimitado
  • "Water level"
  • "SELECT"
Use comillas dobles (
"
) como delimitador.
En el identificador, utilice cualquier carácter excepto el del carácter
"
.
Se omite cualquier espacio al final del identificador.

Combinación

Se admite cualquier tipo de combinación, como
INNER
,
UNION
,
LEFT
,
RIGHT
,
FULL
,
NATURAL
y
CROSS
.
OBSERVACIÓN: Algunas combinaciones no son totalmente compatibles con todos los DBMS.

Alias

Puede utilizar alias en los identificadores, las subconsultas de columnas derivadas y las tablas.
A continuación se muestran ejemplos de consultas 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

Referencias de tabla

La cláusula
FROM
admite las siguientes referencias de tabla.
Referencias de tabla compatibles
Referencia
Ejemplo
Referencia totalmente calificada
... FROM table_name
... FROM schema_name.table_name
... FROM database_name.schema.name.table_name
Subconsulta
... FROM (SELECT * FROM Table2) WHERE ...
OBSERVACIÓN: También se admiten nombres completos como referencias de columnas.
Ejemplos:
... 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 compatibles
Operador
Ejemplo
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
El operador
NOT
se aplica a todos los demás operadores.
OBSERVACIÓN: Los operadores
ANY
y
ALL
no son compatibles.

Funciones de ventana

Funciones de ventana compatibles
Función
Ejemplo
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)
OBSERVACIÓN: La cláusula
PARTITION BY
solo admite identificadores de columna.

Tokens

Tokens admitidos
Token
Expresión regular
regular_identifier
[a-zA-Z][a-zA-Z0-9_]*
delimited_identifier
".*?"
real
boolean
Otros tokens triviales
Regex para tokens de un solo carácter o de una sola palabra
OBSERVACIÓN: Lexer no reconoce los valores de fecha y hora como tokens: se analizan como
delimited_identifier
. El analizador semántico extrae los valores de fecha y hora de
delimited_identifier
de acuerdo con la expresión regular
r
.
Entregue su opinión
¿Tiene dudas o comentarios acerca de esta documentación? Por favor deje su opinión aquí.