QUERY BY SQL
QUERY BY SQL ( {aTable ;} sqlFormula )
引数 | 型 | 説明 | |
---|---|---|---|
aTable | テーブル | 🡒 | レコードセレクションを返すテーブル、または 省略された場合デフォルトテーブル |
sqlFormula | 文字 | 🡒 | SELECTクエリのWHERE節を表す 有効なSQL検索フォーミュラ |
説明
4Dに統合されたSQLカーネルのメリットを利用ためにQUERY BY SQLコマンドを使用できます。このコマンドで以下のような簡単なSELECTクエリを実行できます:
SELECT * FROM aTable WHERE
aTableは、最初の引数に渡されるテーブルの名前です。sqlFormulaは、2番目の引数で渡されるクエリの文字列です。
例えば、以下のステートメントは、
([Employees];"name=’smith’")
以下のSQLクエリに相当します。
SELECT * FROM Employees WHERE "name=’smith’"
QUERY BY SQL コマンドは、QUERY BY FORMULA コマンドと類似しています。指定されたテーブルでレコードを探します。このコマンドは、カレントプロセスのaTableのカレントセレクションを変更し、新しいセレクションの最初のレコードをカレントレコードにします。
Note: QUERY BY SQL コマンドは、外部SQL接続のコンテクストでは使用されません。このリクエストは4Dの統合されたSQLエンジンに直接接続します。
QUERY BY SQLは、テーブルセレクションの各レコードにsqlFormulaを適用します。sqlFormulaはブール式で、TrueまたはFalseを返さなければなりません。SQL標準では、検索条件はTrue、FalseまたはNULLを返します。検索条件がTrueを返す全てのレコード (行) が、新しいカレントセレクションに含まれます。
例えば、値とフィールド (カラム) と比較する場合、sqlFormula式は単純です。しかし演算などを実行したりすると、sqlFormulaの式は複雑になります。QUERY BY FORMULAのように、QUERY BY SQLはリレートするテーブルの情報を評価できます (例題4を参照)。sqlFormulaは有効なSQLステートメントでなければなりません。そしてそのステートメントは4Dの現在のSQLの実行規則の点においてSQL-2スタンダードに準じていなければなりません。4DのSQLのサポートについては、4D SQL Referenceマニュアルを参照してください 。
sqlFormula引数は、4D式への参照を使用できます。使用できるシンタックスは、統合SQLコマンドやBegin SQL/End SQLタグの間に挿入されるコード (<
注: このコマンドは、SET QUERY LIMITやSET QUERY DESTINATIONコマンドと互換です。
注: コンパイルモードではローカル変数への参照を使用することはできません。4DにおけるSQLプログラミングの情報はSQLコマンドの概要を参照してください。
リレーションについて
4Dのストラクチャエディタで定義されたテーブル間で、QUERY BY SQLはリレーションを使用しません。関連するデータを利用したい場合、クエリへJOINを追加する必要があります。例えば、[Persons]Cityから[Cities]Nameの間に、N対1リレーションを持つ以下のストラクチャがあると仮定します:
[People] Name City [Cities] Name Population
QUERY BY FORMULAコマンドを使用して、以下のように記述できます:
QUERY BY FORMULA([People];[Cities]Population>1000)
QUERY BY SQLを使用して、リレーションの存在の有無に関わらず、以下のステートメントを記述できます:
QUERY BY SQL([People];"people.city=cities.name AND cities.population>1000")
Note: QUERY BY SQLは、QUERY BY FORMULAと異なる方法で、1対NとN対Nリレーションを扱います。