SQL クエリ

SQL (Structured Query Language) は、リレーショナルデータベースに格納されたデータを単純なステートメントで管理します。ANSI SQL-92 標準を使用して、ODBC データベースと埋め込みデータベースをクエリします。

SQL 文法

トップダウン SQL パーサーは、次の理由により、標準 SQL 文法の簡略化されたバージョンに基づいています。
  • FactoryTalk Optix は、標準 SQL のサブセットのみをサポートしています。
  • 簡略化された標準 SQL 文法は、トップダウンのパーサー実装に最も適しています。
  • 簡略化された標準 SQL 文法により、結果の AST の可読性が向上します。

ステートメント

ヒント: 特殊文字を含む列名をエスケープするには、次の方法を使用します:
SELECT MAX(
"/Variable1"
) FROM mystore.recipeschema1;
FactoryTalk Optix Studio
は、SQL クエリで次のステートメントをサポートします。
  • SELECT
    ステートメントを使用して、データベースからデータを選択します。このステートメントは、列名と値式の両方、および
    ALL
    DISTINCT
    セット量指定子をサポートしています。
    例:
    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
    注:
    CASE
    式と
    WHEN
    式はサポートされていません。
    重要:
    SQL 標準では、
    *
    と派生列を組み合わせることはできません。
    SELECT *, Timestamp FROM Table1
    SELECT *, ROW_NUMBER() OVER (ORDER BY Timestamp) FROM DataLogger
    FactoryTalk Optix
    は、スパークライン グラフのクエリ操作を有効にするために、この標準をサポートしています。
  • DELETE
    ステートメントを使用して、テーブル内の既存のレコードを削除します。
    例:
    SELECT * FROM Table1 WHERE ... DELETE FROM Table1 WHERE ... UPDATE Table1 SET column1 = 10 WHERE column2 > 20 ...
  • UPDATE
    ステートメントを使用して、テーブル内の既存のレコードを変更します。
    例:
    SELECT * FROM Table1 WHERE ... DELETE FROM Table1 WHERE ... UPDATE Table1 SET column1 = 10 WHERE column2 > 20 ...
FactoryTalk Optix Studio
は、SQL クエリで次のステートメントを一部サポートします。
  • CREATE
    ステートメントを使用して、テーブルまたはデータベース内のテーブルを作成します。このステートメントは
    TABLE
    INDEX
    を部分的にサポートしています。
    例:
    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
  • DROP
    ステートメントは、データベース内の既存のデータベースまたはテーブルをすべて削除します。
    例:
    DROP TABLE TemporaryTable DROP TABLE Table1

リテラル値

サポートされているリテラル値
リテラル値タイプ
メモ
整数
1520
桁区切り記号は使用しないでください。
Int32 タイプを使用します。
実数
15.025
小数点記号として
.
を使用します。
ダブル タイプを使用します。
実数科学
2.7000001072883606E-1
ブール値
  • true
  • false
ブール値には小文字を使用します。
文字列
'string value'
一重引用符を使用して、テキストを区切ります。
一重引用符を別の一重引用符でエスケープして、テキスト文字列に一重引用符 (
'
) を挿入します。たとえば、
'string'
と記述するには、文字列内に一重引用符
''string''
を 2 つ使用します。
日時
"2004-05-23T14:25:10.487"
二重引用符で区切られた ISO8601 形式を使用します。
日時の表記は、あいまいさのない
DATE
TIME
、および
TIMESTAMP
キーワードを回避するために非標準の ANSI SQL を使用します。
標準識別子
  • Column1
  • Grüße
スペースは使用しないでください。
大文字または小文字で開始します。
数字、文字、およびアンダースコア文字
_
を使用できます。
区切られた識別子
  • "Water level"
  • "SELECT"
区切り文字として二重引用符 (
"
)を使用します。
識別子には、
"
文字以外の任意の文字を使用します。
識別子の末尾にあるスペースはすべて無視されます。

結合

INNER
UNION
LEFT
RIGHT
FULL
NATURAL
CROSS
などのあらゆる種類の結合がサポートされています。
注: 一部の結合は、すべての DBMS で完全にサポートされているわけではありません。

エイリアス

エイリアスは、識別子、派生列のサブクエリ、およびテーブルで使用できます。
以下は、エイリアスを使用したクエリの例です。
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

テーブルリファレンス

FROM
句は、次のテーブルリファレンスをサポートしています。
サポートしているテーブルリファレンス
リファレンス
完全修飾リファレンス
... FROM table_name
... FROM schema_name.table_name
... FROM database_name.schema.name.table_name
サブクエリ
... FROM (SELECT * FROM Table2) WHERE ...
注: 完全修飾名は、列リファレンスとしてもサポートされています。
例:
... 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

オペレーター

サポートされている演算子
オペレーター
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
NOT
演算子は他のすべての演算子に適用されます。
注:
ANY
ALL
演算子はサポートされていません。

ウィンドウ関数

サポートされているウィンドウ関数
関数
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)
注:
PARTITION BY
句は、列識別子のみをサポートします。

トークン

サポートされているトークン
トークン
正規表現
regular_identifier
[a-zA-Z][a-zA-Z0-9_]*
delimited_identifier
".*?"
real
boolean
その他のトリビアルトークン
単一文字または単一単語トークンの正規表現
注: 字句解析器は日付と時刻の値をトークンとして認識せず、
delimited_identifier
として解析します。意味解析ツールは、
r
正規表現に従って、
delimited_identifier
から日付と時刻の値を抽出します。
ご質問やご意見
このドキュメントに関するご質問やご意見は、こちらまでお寄せください。 こちらからご意見をお寄せください。
Normal