Atlas SQL 言語リファレンス
項目一覧
このページでは、Atlas SQL SQLMongoDBの 柔軟な を操作するためのファーストクラスのサポートを提供するように設計された のダイアレクトであるdocument model の構文とセマンティクスについて説明します。このページでは、サポートされている句、演算子、式、関数を一覧表示して説明します。
互換性と制限
Atlas SQL は SQL-92 標準に基づいています。 ただし、Atlas SQL は次の制限があるため、完全に SQL-92 と互換性はありません。
UNION
関数はサポートされていません。 ただし、UNION ALL
はサポートされています。date
データ型はサポートされていません。 代わりにtimestamp
を使用してください。SELECT DISTINCT
はサポートされていません。間隔および日付間隔の算術演算はサポートされていません。
Atlas SQL は Atlas Vector Search および Atlas Search をサポートしていません。
タイプ システム
データ型
Atlas SQL データ型は BSON types のセットです 。Atlas SQL ではこれらのすべてのタイプをクエリできます。 これらは次のとおりです。
string (
STRING
)ドキュメント(
DOCUMENT
)配列(
ARRAY
)BinData (
BINDATA
)ObjectId (
OBJECTID
)ブール値(
BOOL
)日付(
TIMESTAMP
)null(
NULL
)正規表現(
REGEX
)32 ビット整数(
INT
)double (
DOUBLE
)Long (
LONG
)タイムスタンプ(
BSON_TIMESTAMP
)小数(
DECIMAL
)MinKey(
MINKEY
)MaxKey(
MAXKEY
)DBPointer(
DBPOINTER
)シンボル(
SYMBOL
)JavaScriptとスコープ(
JAVASCRIPTWITHSCOPE
)JavaScript(
JAVASCRIPT
)
Atlas SQL の各型には名前(上記の括弧内)があります。これは、必要に応じて型を参照するために使用できるキーワードです(例: CAST
のような式では)。
タイプの変換
明示的な型変換はCAST
関数または::
演算子を使用して表現されます。 数値型はすべて相互に同等です。 Atlas SQL では、オペランドを同じ数値型にキャストすることなく、さまざまな数値型間で操作を実行できます。
Schemas
Atlas SQL は、スキーマを使用して MongoDB の柔軟なドキュメント値をタイプに変換します。 Atlas SQL スキーマは、コンパイル時に true であることが確認されている式またはコレクションに関するファセットのコレクションです。
たとえば、Atlas SQL スキーマは、式がブール値またはサブフィールドを持つドキュメントのいずれかであること、または式が長さが1の配列または正の整数であることを指定できます。
静的型制約が満たされない場合、クエリはコンパイルされません。
句
Atlas SQL クエリは、SQL 句の基本セットをサポートしています。 使用可能な 句は次のとおりです。
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
OFFSET
LIMIT
SELECT
SELECT
は、すべての Atlas SQL クエリを開始します。 Atlas SQL では、 SELECT VALUE
とSELECT VALUES
をどちらも使用できます。
Atlas SQL では、エイリアスが存在するためにネストされたSELECT
ステートメントが必要です。
SELECT foo FROM (SELECT bar FROM baz) as subSelect
CAST()
Atlas SQLはCAST()
関数をサポートしています。これを使用すると、クエリ内の値を特定のデータ型に動的に変換できます。
SELECT * FROM table WHERE period_start_utc >= CAST('2023-01-01T00:00:00.000Z' AS TIMESTAMP)
from
FROM
は、すべての Atlas SQL クエリで評価される最初の句です。
FROM
は、コレクション(SELECT * FROM foo)
、配列(SELECT * FROM [{'a': 1}])
、結合(SELECT * FROM a JOIN b)
、 派生テーブル(SELECT * FROM (SELECT a FROM foo) d)
、 FLATTEN と UNIX などのさまざまなソースからデータを取得できます。
WHERE
WHERE
句は受信データのフィルタです。 その式は静的にタイプBOOL
またはNULL
である必要があり、 MISSING
と評価される可能性があります。
グループ化基準:
GROUP BY
データをグループ化および集計するための手段を提供します。
FLATTEN または UNIXを使用してフラット化されたフィールドでGROUP BY
を使用する場合は、エイリアスが必要です。
SELECT customerAge, COUNT(*) FROM Sales GROUP BY customer.age AS customerAge
集計関数
Atlas SQL は次の集計関数をサポートしています。
名前 | 説明 | ノート |
---|---|---|
| 引数を配列の末尾にプッシュします。 この関数の合計出力は配列になります。 |
|
| 重複を排除する配列の末尾に引数をプッシュします。 この関数の合計出力は、重複する項目がすべて削除された配列になります。 重複は |
|
| すべての引数の平均を返します。 | 引数は数値型に静的に型指定する必要があります。 |
| 要素の数をカウントします。 |
|
| グループの最初の要素を返します。 | 入力に決定的な順序がある場合にのみ決定的であり、それ以外は未定義です。 |
| グループの最初の要素を返します。 入力に決定的な順序がある場合にのみ決定的であり、それ以外は未定義です。 |
|
| Atlas SQL |
|
| ドキュメントを連続してマージして作成されたドキュメントを返します。前の要素は左側として使用されます。 重複キーの場合、新しい要素内のキーの値は保持されます。 | 引数は |
| Atlas SQL |
|
| グループ全体にわたるすべての要素の標準偏差を返します。 | 引数は数値型に静的に型指定する必要があります。 See stdDevPop. |
| グループ内のすべての要素のサンプルの標準偏差を返します。 stdDevPop を参照してください。 | 引数は数値型に静的に型指定する必要があります。 |
| すべての引数の合計を返します。 | 引数は数値型に静的に型指定する必要があります。 |
HAVING
HAVING
句はWHERE
句と同じように動作しますが、 GROUP BY
句の後に動作します。 WHERE
句と同様に、 HAVING
句は静的にBOOL
タイプまたはNULL
タイプである必要があり、 MISSING
と評価される可能性がある 式 を使用します。 GROUP BY
で定義されたエイリアスを参照し、集計関数を持つ式を含めることができます。 GROUP BY
で定義されたエイリアスのみがHAVING
句で使用できます。
並び替え基準:
ORDER BY
句は、1 つ以上のソートキーで結果セットを並べ替える方法を提供します。 各ソートキーは、列参照、または選択された式リスト内の位置によりSELECT
式を参照する整数リテラルのいずれかになります。 列参照であるソートキーは、複合識別子にすることができます。 これらの複合識別子は、データソース名で修飾したり、ドキュメント サブフィールドを参照したりできます。
Atlas SQL は、MISSING
NULL
NULL
を の前にソートし、 を他のすべての値の前にソートします。ORDER BY
句では、ソートキー式内のすべての可能な値が、 >
(より大きい)および<
(より小さい)演算子によって同等であることが静的に検証される必要があります。
制限とオフセット
LIMIT
およびOFFSET
句を使用すると、ユーザーはクエリによって返された行の一部のみを取得できます。 LIMIT
という数値が指定された場合、その行数以上の行は返されません。 OFFSET
数値が指定されている場合、その行数は行を返す前にスキップされます。
LIMIT
とOFFSET
の数値はいずれも正の整数である必要があります。 なしでLIMIT
またはOFFSET
ORDER BY
を使用しても、同じ結果は保証されません。
LIMIT
とOFFSET
の両方が設定されている場合、結果の残りを返す前にOFFSET
行がスキップされます。この行には、 LIMIT
桁の行以下が含まれる必要があります。
LIMIT i, j
はLIMIT i OFFSET j
の短縮形です。
LIMIT
とOFFSET
はサブクエリで使用できます。
セット操作
UNION ALL
セット演算子は、2 つのSELECT
クエリに対して 1 つの結果セットを返します。 UNION ALL
演算子は結果セットから重複行を削除しません。 UNION ALL
演算子によって返される結果セットには、順序が定義されていません。
Atlas SQL は、個別のUNION
、 INTERSECT
、またはEXCEPT
のセット操作をサポートしていません。
式
Identifiers
Atlas SQL の識別子は、データベース、テーブル、および列を参照します。 Atlas SQL 識別子は、null 文字\x00
を除くすべての UTF- 8文字をサポートします。
Atlas SQL 、他のセマンティック意味を持つ文字との競合を避けるために、一部の識別子は制限されています。識別子にこのような文字を含めるには、区切りである必要があります。つまり、 double引用符またはバッククションで囲む必要があります。 例えば、識別子が数字で始まる場合や予約済みのキーワードと競合する場合(例: "10cent"
)。 識別子は、区切り文字が含まれているかどうかにかかわらず、大文字と小文字を区別します。
Aliases
Atlas SQL のすべてのエイリアスに識別子が使用されます。 ほとんどの場合、エイリアスが同じ句で複数回使用されると、Atlas SQL はエラーを返します。 ただし、 UNION ALL
の両方でエイリアスを繰り返すことができることです。 これは、自動生成エイリアスにも適用されます。
Keywords
Atlas SQL キーワード( SELECT
、 FROM
、 JOIN
など)は、非区切り識別子として使用できません。
リテラル
Atlas SQL は、ブール値、null、数値、string のリテラルをサポートしています。 stringは一重引用符で囲みます。 stringリテラルに一double引用符を含めるには、二重引用符('o''clock'
)にします。
リテラル整数は、 32ビットの符号付き整数範囲内にある場合はINT
と入力され、それ以外の場合はLONG
と入力されます。 リテラル浮動小数点数または科学表記数のタイプはDOUBLE
です。
Atlas SQL はすべての型のリテラルをサポートしていません。たとえば、 OBJECTID
、 BSON_DATE
、DECIMAL
にはリテラル構文がありません。このような型の場合、CAST
演算子を使用してそれらの型の string または数値表現をそれぞれの型に取得することで、疑似リテラル値を取得できます。一部のタイプには、関連するCAST
呼び出しをエイリアスする「コンストラクター」関数がある場合もあります。
括弧付き式
括弧付き式は、括弧でグループ化された式です。 インデックス演算子が存在する場合には常に、操作の順序を区別するために括弧(または同様のメカニズム)が必要になる場合があります。 Atlas SQL には、 +
や::
などのいくつかの挿入演算子があります。 たとえば、 1 + 2 * 3
の値は7で、 (1 + 2) * 3
の値は9です。
演算子
Atlas SQL は次の基本演算子をサポートしています。
+
-
*
/
||
<
<=
!=
==
>
>=
BETWEEN
AND
OR
NOT
サブクエリ式
サブクエリは、クエリ内の SQL クエリです。 サブクエリは、 式 を使用できる任意の場所で使用できます。
Atlas SQL は、スカラー サブクエリとテーブル サブクエリをサポートしています。 スカラーサブクエリは、0 または 1 行と 1 列を含む結果セットを返します。 リテラルまたは単一列の値が有効なほとんどの場所で使用できます。 テーブル サブクエリは、0 個以上の行と 1 つ以上の列を返します。
ドキュメント式とフィールドアクセス式
ドキュメントは、JSON オブジェクトと同様の構文で表すことができます。 キーは string である必要があり、値はサポートされている任意の 型にすることができます。 ドキュメント フィールドにアクセスするために、Atlas SQL は「ドット」表記と「括弧」表記の 2 つのオプションをサポートしています。
ドット表記は、MongoDB 集計のフィールド アクセスに似ています。 たとえば、ドキュメントdoc
にフィールドf
が含まれている場合、そのフィールドの値にアクセスするために式doc.f
が使用されます。 括弧表記では、フィールド名を囲む角括弧( [
と]
)を使用して、その名前のフィールドにアクセスします。 たとえば、以前に説明されている同じドキュメントを考えてみましょう。そのフィールドの値にアクセスするにはdoc["f"]
が使用されます。
null と欠落
BSON ではNULL
とMISSING
を区別します。 NULL
の場合、リテラル値NULL
を持つフィールドが存在しますが、 MISSING
の場合では、このフィールドはなくなります。
コメント
コメントはクエリ内の文字のシーケンスであり、クエリの実行に影響を与えません。 Atlas SQL は、標準の SQL コメントと C スタイルのブロックコメントの両方をサポートしています。
標準のSQLコメントは、 doubleダッシュで始まり、改行で終わります。
\-- This is a standard SQL comment
ブロックコメントは\*
で始まり、 */
の一致する出現で終わります。
\* This is a multiline comment */