QUERY BY SQL

4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次

version 11


QUERY BY SQL ({aTable; }sqlFormula)

引数説明
aTableテーブルレコードセレクションを返すテーブル、または
省略された場合デフォルトテーブル
sqlFormula文字列SELECTクエリのWHERE節を表す
有効なSQL検索フォーミュラ

説明

4Dに統合されたSQLカーネルのメリットを利用ためにQUERY BY SQLコマンドを使用できます。このコマンドで以下のような簡単なSELECTクエリを実行できます:

   SELECT *
      FROM aTable
      WHERE <sqlFormula>

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標準では、検索条件はTrueFalseまたは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コマンドの概要の節を参照してください。

Note: このコマンドは、SET QUERY LIMITSET QUERY DESTINATIONコマンドと互換です。

リレーションについて

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リレーションを扱います。

例題

1. 売上高が100を超えるオフィスを表示します。SQLは以下のようになります:

   SELECT *
      FROM Offices
      WHERE Sales > 100

QUERY BY SQL コマンドを使用すると、

   C_STRING(30;$queryFormula)
   $queryFormula:="Sales > 100"
   QUERY BY SQL([Offices];$queryFormula)

2. 3000から4000件の範囲に分類される注文を表示します。SQLは以下のようになります:

   SELECT *
      FROM Orders
      WHERE Amount BETWEEN 3000 AND 4000

QUERY BY SQL コマンドを使用すると、

   C_STRING(40;$queryFormula)
   $queryFormula:="Amount BETWEEN 3000 AND 4000"
   QUERY BY SQL([Orders];$queryFormula)

3. 指定された条件で並び替えされたクエリ結果の取得方法を説明します。SQLは以下のようになります:

   SELECT *
      FROM People
      WHERE City =’Paris’
         ORDER BY Name

QUERY BY SQL コマンドを使用すると、

   C_STRING(40;$queryFormula)
   $queryFormula:="City= ‘Paris’ ORDER BY Name"
   QUERY BY SQL([People];$queryFormula)

4. 4Dのリレートテーブルを使用するクエリをこの例で示します。SQLでは、JOINを使用してリレーションを表わします。以下の2つのテーブルがあると仮定します:

   [Invoices] :
      ID_Inv: Longint
      Date_Inv: Date
      Amount: Real
   [Lines_Invoices] :
      ID_Line: Longint
      ID_Inv: Longint
      Code: Alpha (10)

[Lines_Invoices]ID_Invから[Invoices]ID_Invの間に、N対1のリレーションがあります。

QUERY BY FORMULAコマンドでストラクチャのリレーションを使用する場合、以下のように記述します:

   QUERY BY FORMULA([Lines_Invoices];([Lines_Invoices]Code="FX-200") & (Month of([Invoices]Date_Inv)=4))

これをSQLクエリで表すと以下のようになります:

   SELECT ID_Line
      FROM Lines_Invoices, Invoices
      WHERE Lines_Invoices.ID_Inv=Invoices.ID_Inv
         AND Lines_Invoices.Code='FX-200'
         AND MONTH(Invoices.Date_Inv) = 4

QUERY BY SQL コマンドを使用する場合:

   C_STRING(40;$queryFormula)
   $queryFormula:="Lines_Invoices.ID_Inv=Invoices.ID_InvAND Lines_Invoices.Code=’FX-200’ AND MONTH(Invoices.Date_Inv)=4"
   QUERY BY SQL([Lines_Invoices];$queryFormula)

参照

QUERY BY FORMULA.

システム変数またはセット

検索条件のフォーマットが正確な場合、システム変数OKは1で設定されます。それ以外の場合、0で設定されます。コマンドの結果は空のセレクションとなり、エラーが返されます。ON ERR CALLコマンドでインストールされたメソッドがこのエラーを阻止します。


4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次