はじめに

最終公開日 : Aug 10, 2026
Related information

概要

このドキュメントでは、EBX® の構造化照会言語 (SQL) のクエリと式について説明します。EBX® は、1 つ以上のテーブルから選択された行を取得するための標準 SQL クエリをサポートしています。一部の EBX® SQL 言語機能は、標準の拡張機能です。サポートされている EBX® SQL 構文には、テーブル式 (SELECT、FROM、WHERE、GROUP BY、および HAVING 句)、DISTINCT、ORDER BY、LIMIT、および OFFSET、クエリの組み合わせ (UNION )、および WITH (RECURSIVE修飾子を除く) が含まれます。
この API の目的は、よく知られた標準を使用して EBX® からデータを取得する機能を開発者に提供することです。
EBX® SQL は Java API を介して、特に Query クラスからアクセスできます。クエリはパラメーターもサポートしています。 Query.setParameterを参照してください。
クエリには、単一のデータセットまたは複数のデータセットを含めることができます。クエリの作成方法の詳細については、 QueryBuilder を参照してください。

データモデルエンティティのマッピング

次のセクションでは、EBX® の概念の SQL へのマッピングについて詳しく説明します。

テーブル (データモデル内)

EBX® テーブルは、SQL テーブルに自然にマッピングされます。データモデルには、同じ名前の EBX® テーブルが複数存在する場合があります。このあいまいさは、テーブルがグループにある場合に発生する可能性があります。あいまいさを取り除くには、二重引用符で囲まれたテーブルのフルパスを使用します (たとえば、"my_group/my_table""other_group/my_table" と競合しなくなります)。データモデル内で一意のテーブルのエンティティ名を使用することもできます。テーブル名は、エンティティ名または別のテーブル名と競合しない場合にのみ使用できます。
以下も参照してください。:

フィールド

SQL 標準では、テーブルの構造は 1 つ以上の列で構成されます。親が EBX® テーブルであるすべてのエレメント (フィールドを含む) は、列にマップされます。

グループ

SQL 標準では、テーブルの構造は 1 つ以上の列で構成されます。親が EBX® テーブルであるすべてのエレメントは、列にマップされます。これには、SQL 構造タイプとして SQL 列にマッピングされるグループが含まれます。

関連付け

SQL 標準では、複数のテーブル間でのデータのクエリは、外部キーと主キーに基づいています。EBX® のこれらの概念は、SQL の概念と似ています。したがって、SQL のテーブル間の結合は、EBX® 外部キーと主キーを使用して実行することもできます。

データ型のマッピング

SQL を介したデータの処理は、そのデータ型に大きく依存します。たとえば、述語では、列が同じ SQL データ型を持っている場合にのみ列を比較できます。SQL データ型は、データモデルの型に応じた型です。

単純データ型

サポートされている標準 SQL データ型
この表は、EBX® でサポートされている XML スキーマで定義されているすべての単純型と、それに対応する標準 SQL 型を示しています。
XML スキーマタイプ SQL タイプ Java タイプ 注意
xs:string VARCHAR java.lang.String
xs:boolean ブール値 java.lang.Boolean 値:TRUE、FALSE、UNKNOWN
xs:decimal 10 進数 java.math.BigDecimal
xs:dateTime タイムスタンプ java.util.Date
xs:time 時間 java.util.Date 返される Date の日付部分は常に「1970/01/01」に設定されます。
xs:date 日付 java.util.Date 返される Date の時間部分は、常に 1 日の始まり (つまり、「00:00:00」) に設定されます。
xs:anyURI VARCHAR java.net.URI
xs:Name ( xs:string restriction) VARCHAR java.lang.String
xs:int 整数 java.lang.Integer

EBX® で定義された拡張単純型

EBX® は、事前定義された単純なデータ型を提供します。これらのタイプは、内部スキーマ common-1.0.xsd によって定義されます。それらの定義については、EBX® で定義された拡張単純型のセクションで詳しく説明しています。
XML スキーマタイプ SQL タイプ Java クラス
osd:text ( xs:string restriction) VARCHAR java.lang.String
osd:html ( xs:string restriction) VARCHAR java.lang.String
osd:email ( xs:string restriction) VARCHAR java.lang.String
osd:password ( xs:string restriction) VARCHAR java.lang.String
osd:color ( xs:string restriction) VARCHAR java.lang.String
osd:resource ( xs:anyURI restriction) VARCHAR 内部クラス
osd:locale ( xs:string restriction) VARCHAR java.util.Locale
osd:dataspaceKey ( xs:string restriction) VARCHAR java.lang.String
osd:datasetName ( xs:string restriction) VARCHAR java.lang.String

リスト (複数値) タイプ

リストは SQL 配列として処理されます。対応する Java クラスは java.util.List です。

複合型

複合型は SQL 構造化型として扱われます。対応する Java クラスは Object[] です。これは、外部キー (以下を参照) とグループに適用されます。これらは、複合型によって定義されているためです。ドット演算子を使用して、SQL 構造型内のフィールドにアクセスします。たとえば、複合型の場合は、 address.street を使用してフィールド address のフィールド street にアクセスします。クエリで複合型のサブフィールドを参照する場合は、常にテーブル名またはエイリアスを使用する必要があります。
  • SELECT customer.address.street FROM customer
  • SELECT c.address.street FROM customer c

TableRef 型

EBX® では、テーブルに複数のフィールドで構成される主キーを含めることができます。外部キーは、osd:tableRef 宣言のある単一のフィールドによって定義されます。標準の SQL 構文が拡張され、対象の主キーフィールドの値が抽出されるようになりました。外部キーの抽出の例では、次の SQL 式が有効です。
  • tableA.fkb.id = 123
  • YEAR(tableA.fkb.date)> 2018
注意:
主キーが 1 つのフィールドのみで構成されている場合でも、値にアクセスするにはフィールドの名前を指定する必要があります。たとえば、主キーが単一の id で構成されている場合、 tableA.fkb.id = 123 のように、値にアクセスするには fkb.id を使用する必要があります。
tableRef の使用法の典型的な例は、SQL 結合です。
SELECT * FROM employee JOIN department ON employee.fkDept.id = department.id
または、参照されるテーブルに複合主キーがある場合
SELECT * FROM tableA JOIN tableB ON tableA.fkB.id1 = tableB.id1 AND tableA.fkB.id2 = tableB.id2

メタデータフィールド

EBX® SQL は、一部のメタデータ情報へのアクセスも提供します。これらのフィールドは、明示的に参照されない限り、SQL ステートメントによって返されません。たとえば、「 SELECT * FROM ...」はメタデータフィールドを返しませんが、「 SELECT metadataField FROM ...」は返します。
名前 説明 SQL タイプ Java クラス
creator レコードの作成者 VARCHAR java.lang.String SELECT t."ebx-metadata"."system"."creator" FROM myTable t SELECT t.* FROM myTable t WHERE t."ebx-metadata"."system"."creator" = 'Uuser1' SELECT t.* FROM myTable t ORDER BY t."ebx-metadata"."system"."creator"
creation_time レコードの作成時刻 タイムスタンプ java.util.Date SELECT t."ebx-metadata"."system"."creation_time" FROM myTable t SELECT t.* FROM myTable t WHERE t."ebx-metadata"."system"."creation_time" > TIMESTAMP'2001-06-10 14:57:20' SELECT t.* FROM myTable t ORDER BY t."ebx-metadata"."system"."creation_time"
updater レコードを変更した最後のユーザー VARCHAR java.lang.String SELECT t."ebx-metadata"."system"."updater" FROM myTable t SELECT t.* FROM myTable t WHERE t."ebx-metadata"."system"."updater" = 'Uuser1' SELECT t.* FROM myTable t ORDER BY t."ebx-metadata"."system"."updater"
update_time レコードの最終変更時刻。 タイムスタンプ java.util.Date SELECT t."ebx-metadata"."system"."update_time" FROM myTable t SELECT t.* FROM myTable t WHERE t."ebx-metadata"."system"."update_time" > TIMESTAMP'2001-06-10 14:57:20' SELECT t.* FROM myTable t ORDER BY t."ebx-metadata"."system"."update_time"

システム列

テーブルに存在するフィールドとは別に、EBX® SQL はいくつかの追加のシステム列を提供します。これらの列は、明示的に参照されていない限り、SQL ステートメントによって返されません。たとえば、「 SELECT * FROM ...」はシステム列を返しませんが、「 SELECT systemColumnName FROM ...」は返します。
名前
説明
SQL タイプ
Java クラス
$adaptation
テーブルレコードを表す Adaptation
内部型
com.onwbp.adaptation.Adaptation
SELECT t."$adaptation" FROM myTable t WHERE t.value>100
$pk
レコードの主キーの文字列表現。
以下も参照してください。:
VARCHAR
java.lang.String
SELECT t.* FROM myTable1 t WHERE t."$pk"='123'
SELECT t.* FROM myTable2 t WHERE t."$pk"='123|abc'
SELECT t."$pk" FROM myTable3 t WHERE t.value>100
SELECT t.value FROM myTable3 t ORDER BY t."$pk"

SQL 構文

サポートされている標準の演算子と関数

演算子は、比較や算術演算などの演算を実行するために、主に SQL ステートメントの WHERE 句で使用される予約語または文字です。これらの演算子は、SQL ステートメントで条件を指定し、ステートメントで複数の条件の接続詞として機能するために使用されます。EBX® は、ほとんどの SQL 標準演算子と関数をサポートしています。一部の関数と演算子は、オプションのパラメーターを持つことができます。ドキュメントでは、それらは角括弧で囲まれています。一般に、演算子と関数には 5 つのタイプがあります。
演算子 結合性
.
(配列エレメント)
+- (単項プラス、マイナス)
* / %
+ -
BETWEEN、IN、LIKE、CONTAINS など -
< > = <= >= <> !=
IS NULL、IS FALSE、IS NO TTRUE など -
NOT
AND
OR

識別子のエスケープ

次の場合、識別子は二重引用符を使用してエスケープする必要があります。
  • 絶対パスを使用してテーブルを識別する場合 (たとえば、「/root/myTable」)。
  • 識別するフィールドが予約語の場合 (「user」、「order」など)。
  • テーブルエイリアス (たとえば、t."$adaptation", t."$pk" でシステム列を参照する場合)。
  • メタデータフィールドを参照する場合 (たとえば、t."ebx-metadata"."system"."creation\_time")。
次の例は、すべてのケースを例示するためのクエリを示しています。
SELECT t."user", t."$pk" FROM "/root/myTable" t WHERE t."order" = 1

プラン情報

EBX® SQL は EXPLAIN PLAN FOR ... 構文をサポートして、クエリのプラン情報を取得します。
結果は Query.explain に似ています。
例: EXPLAIN PLAN FOR SELECT id FROM myTable

制限とパフォーマンスのガイドライン

  • 内部結合の最適化では、RIGHT 結合と FULL 結合がサポートされていないため、可能であればこれらの結合タイプは避けてください。
  • 数値または 10 進値の最大精度とスケールは 1000 です。
  • GROUP BY や集約関数 ( MIN MAX など) を使用したクエリは最適化されませんが、 COUNT は状況に応じて最適化されます。
  • 現在、 MIN および MAX 演算子は内部インデックスを利用していません。代わりに、次の同等のクエリを使用してください。多くの場合、これらはより効率的です。
    SELECT MAX(val) FROM myTable の代わりに SELECT val FROM myTable ORDER BY val DESC NULLS LAST LIMIT 1
    SELECT MIN(val) FROM myTable の代わりに SELECT val FROM myTable ORDER BY val LIMIT 1