4D v16.3

QUERY BY SQL

ホーム

 
4D v16.3
SQL
QUERY BY SQL

QUERY BY SQL 


 

QUERY BY SQL ( {aTable ;} sqlFormula ) 
引数   説明
aTable  テーブル in レコードセレクションを返すテーブル、または 省略された場合デフォルトテーブル
sqlFormula  文字 in 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コマンドの概要の節を参照してください。

注: このコマンドは、SET QUERY LIMITSET 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リレーションを扱います。

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

   SELECT *
      FROM Offices
      WHERE Sales > 100

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

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

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)

指定された条件で並び替えされたクエリ結果の取得方法を説明します。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)

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)

検索条件のフォーマットが正しければ、OKシステム変数は1に設定されます。そうでなければこのコマンドの結果のセレクションは空になり、エラーが返され、OK変数の値は0に設定されます。このエラーはON ERR CALLコマンドでインストールされるエラー処理メソッドでとらえることができます。



参照 

QUERY BY FORMULA

 
プロパティ 

プロダクト: 4D
テーマ: SQL
番号: 942

このコマンドはOKシステム変数を更新しますErrorシステム変数が更新されることがあります。このコマンドはカレントレコードを変更しますこのコマンドはカレントセレクションを変更しますCommande provoquant un échange entre le client et le serveur

 
履歴 

初出: 4D v11 SQL

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v16)
ランゲージリファレンス ( 4D v16.1)
ランゲージリファレンス ( 4D v16.2)
ランゲージリファレンス ( 4D v16.3)