4D v14結合のサポート |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v14
結合のサポート
結合のサポート
4DのSQLエンジンは結合のサポートを拡張します。 結合操作はINNERまたはOUTER、そして明示または暗黙です。暗黙のINNER結合はSELECTコマンドでサポートされます。さらにJOINキーワードを使用して生成される明示的なINNER結合とOUTER結合が使用できます。 Note: 4D SQLエンジンの結合の現在の実装には以下が含まれていません:
結合操作は2つ以上のテーブル間のレコードの接続を作成し、結果を結合と呼ばれる新しいテーブルに一体化させるために使用します。 結合条件を指定したSELECTステートメントを使用して結合を生成します。明示的な結合では、これらの条件を複合にすることができますが、常に結合に含まれる列間の等価比較に基づくものでなければなりません。例えば >= 演算子を明示的な結合条件に使用することはできません。暗黙的な結合ではすべてのタイプの比較を使用できます。 Note: 通常データベースエンジンでは、テーブルの順番は検索の間に指定された順番です。しかし結合を使用する際、テーブルの順番はテーブルリストで決定されます。以下の例題で: SELECT * FROM T1 RIGHT OUTER JOIN T2 ON T2.depID = T1.depID; テーブルの順番は (テーブルリストに現れる通り) T1そしてT2です。 (結合条件に現れる順である) T2そしてT1ではありません。 INNER結合は2つの列間で一致する値を探す比較に基づきます。例えば以下の3つのテーブルがあるとき:
Note: この例のストラクチャはこのセクションを通して使用されます。 暗黙的なINNER結合の例は以下の通りです: SELECT * 4Dでは、JOINキーワードを使用して明示的なINNER結合を指定できます: SELECT * このクエリを以下のように4Dコードに挿入できます: ARRAY TEXT(aName;0) この結合結果は以下のとおりとなります:
従業員名がPhilipとMartin、また部署名がMarketingとQualityは結合の結果に現れません。なぜなら:
CROSS結合あるいはデカルト積はWHEREもON句も指定されていないINNER結合です。これはあるテーブルのそれぞれの行を他のテーブルのそれぞれの行に関連付けるものです。 以下のシンタックスはすべて同等です: SELECT * FROM T1 INNER JOIN T2 以下はCROSS結合を行う4Dコードの例です: ARRAY TEXT(aName;0) 以下は例題データベースにおけるこの結合の結果です:
Note: パフォーマンスの理由から、CROSS結合は注意して使用しなければなりません。 4DでOUTER結合を生成できるようになりました。OUTER結合では、結合させるテーブルの行間で値が一致する必要はありません。結果のテーブルには、たとえ一致する行がなくても、テーブル (または少なくとも1つの結合されたテーブル)のすべての行が含まれます。 これは、たとえ異なる結合されたテーブル間でぎょうが完全に値を持っていない場合でも、あるテーブルのすべての情報が使用できることを意味します。 OUTER結合にはLEFT、RIGHT、そしてFULLキーワードで指定される3つのタイプがあります。LEFTとRIGHTは (JOIN キーワードの左あるいは右どちらに位置するかで) すべてのデータが処理されるテーブルを示すために使用されます。FULLは両側のOUTER結合を示します。 Note: 4Dでは明示的なOUTER結合だけがサポートされます。 LEFT OUTER結合 (またはLEFT結合) の結果には、たとえ結合条件に一致するレコードがキーワードの右側のテーブルにない場合でも、常にキーワードの左にあるテーブルのすべてのレコードが含まれます。これは検索が右側のテーブル内で一致する行を見つけることができない左テーブルの各行についても、結合はそれらを結果に含めることを意味します。しかしこの場合右テーブルの各列にはNULL値が入ります。言い換えればLEFT OUTER結合は左側のテーブルのすべての行と、結合条件に一致する右テーブルの行 (または一致しない場合NULL) を作成します。左テーブルの1つの行に対し、結合述部に一致する右テーブルの行が複数ある場合、左テーブルの値は右テーブルの各行に対し繰り返される点に留意してください。 以下はLEFT OUTER結合を行う4Dコードの例です: ARRAY TEXT(aName;0) 以下は例題データベースでこの結合を実行したときの結果です (赤は追加の行を示します):
RIGHT OUTER結合は完全にLEFT OUTER結合の反対です (前の段落参照)。たとえ結合条件に一致するレコードが左のテーブルに見つからない場合でも、結果には常にJOINキーワードの右側のテーブルのすべてのレコードが含まれます。 以下はRIGHT OUTER結合を行う4Dコードの例です: ARRAY TEXT(aName;0) 以下は例題データベースでこの結合を実行したときの結果です (赤は追加の行を示します):
FULL OUTER結合は単純にLEFT OUTER結合とRIGHT OUTER結合の結果を組み合わせたものです。結果の結合テーブルには左および右のレコードがすべて含まれます。それぞれの側で失われたフィールドはNULL値になります。 以下はFULL OUTER結合を行う4Dコードの例です: ARRAY TEXT(aName;0) 以下は例題データベースでこの結合を実行したときの結果です (赤は追加の行を示します):
1つのSELECTステートメント内で複数の結合を組み合わせることができます。また暗黙的または明示的なINNER結合と明示的なOUTER結合を組み合わせることもできます。 以下は複数の結合を行う4Dコードの例です: ARRAY TEXT(aName;0) 以下は例題データベースでこの結合を実行したときの結果です:
|
プロパティ
プロダクト: 4D ARTICLE USAGE
SQLリファレンス ( 4D v14) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||