4D v16.3QUERY BY SQL |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
QUERY BY SQL
QUERY BY SQL
4Dに統合されたSQLカーネルのメリットを利用ためにQUERY BY SQLコマンドを使用できます。このコマンドで以下のような簡単なSELECTクエリを実行できます: SELECT * 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タグの間に挿入されるコード (<<MyVar>>または:MyVar) と同じです。詳細は、SQLコマンドの概要の節を参照してください。 注: このコマンドは、SET QUERY LIMITやSET QUERY DESTINATIONコマンドと互換です。 注: コンパイルモードではローカル変数への参照を使用することはできません。4DにおけるSQLプログラミングの情報はSQLコマンドの概要を参照してください。 4Dのストラクチャエディタで定義されたテーブル間で、QUERY BY SQLはリレーションを使用しません。関連するデータを利用したい場合、クエリへJOINを追加する必要があります。例えば、[Persons]Cityから[Cities]Nameの間に、N対1リレーションを持つ以下のストラクチャがあると仮定します: [People] 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リレーションを扱います。 売上高が100を超えるオフィスを表示します。SQLは以下のようになります: SELECT * QUERY BY SQL コマンドを使用すると、 C_STRING(30;$queryFormula) 3000から4000件の範囲に分類される注文を表示します。SQLは以下のようになります: SELECT * QUERY BY SQL コマンドを使用すると、 C_STRING(40;$queryFormula) 指定された条件で並び替えされたクエリ結果の取得方法を説明します。SQLは以下のようになります: SELECT * QUERY BY SQL コマンドを使用すると、 C_STRING(40;$queryFormula) 4Dのリレートテーブルを使用するクエリをこの例で示します。SQLでは、JOINを使用してリレーションを表わします。以下の2つのテーブルがあると仮定します: [Invoices] : [Lines_Invoices]ID_Invから[Invoices]ID_Invの間に、N対1のリレーションがあります。 QUERY BY FORMULA([Lines_Invoices];([Lines_Invoices]Code="FX-200") & (Month of([Invoices]Date_Inv)=4)) これをSQLクエリで表すと以下のようになります: SELECT ID_Line QUERY BY SQL コマンドを使用する場合: C_STRING(40;$queryFormula) 検索条件のフォーマットが正しければ、OKシステム変数は1に設定されます。そうでなければこのコマンドの結果のセレクションは空になり、エラーが返され、OK変数の値は0に設定されます。このエラーはON ERR CALLコマンドでインストールされるエラー処理メソッドでとらえることができます。
参照
|
プロパティ
プロダクト: 4D 履歴
初出: 4D v11 SQL ARTICLE USAGE
ランゲージリファレンス ( 4D v16) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||