1

CROSS 結合と WHERE 句を使用して任意の結合を実行できることを理解しています。

私はいくつかの実験を行いましたが、同等の述語を where 句内に配置するか、内部結合のパラメーターとして配置すると、同じパフォーマンスで同じ結果が得られるようです。

さらに、内部結合を使用しても、結合述語を指定する必要があるため、入力を節約することはできません。

さまざまな種類の外部結合についても同じことが当てはまると思います。値を null にするかどうかを指定するだけです。

クロス結合のみを使用できますか?

4

3 に答える 3

10

CROSS 結合と WHERE 句を使用して結合を行うことはできません。クロス結合、内部結合、外部結合のそれぞれには、独自の論理的な意味があります。

  1. クロス結合は、デカルト積の 1 つのフェーズのみを適用します。
  2. 内部結合は、デカルト積とフィルターの 2 つのフェーズを適用します。
  3. 外部結合は、デカルト積、フィルター、および外部行の追加の 3 つのフェーズを適用します。

OUTER JOIN 句を含むクエリの紛らわしい点は、論理式を ON フィルターで指定するか、WHERE フィルターで指定するかです。この 2 つの主な違いは、外側の行を追加する前に ON が適用され、後で WHERE が適用されることです。ON フィルタによる保存テーブル (左外部または右外部として指定) からの行の削除は、追加されるため、最終的なものではありません。対照的に、WHERE フィルターによる行の削除は最終的なものです。

この ON 句と WHERE 句の論理的な違いは、外部結合を使用する場合にのみ存在します。内部結合を使用する場合、内部結合テーブル演算子を使用する ON 句またはクロス結合テーブル演算子を使用する Where 句のどこに論理式を指定するかは問題ではありません。

お役に立てれば!!!

于 2013-10-20T13:53:57.297 に答える
1

答えは、パフォーマンスに影響しない可能性があるということですが、実際には内部結合であるクロス結合を開発者が見ていると、読みやすさとコードの明瞭さが妨げられます。それ以外は個人の好みの問題です。

于 2013-10-20T13:38:00.443 に答える
0

あなたの質問は半分正しいです。JOINs と Dekart 製品をテストして比較したとおっしゃいました。結果は同じですが、約 1 年前に MySQL データベースで同じテストを行ったところ、JOINはるかに高速でした。これは、SQL 標準が、結合操作をどのように実装する必要があるかを示しており、Dekart 製品の出力が と同じでなければならないためINNER JOINです。

したがって、いくつかの理由により、標準的な方法でクエリを作成することをお勧めします。

  1. DBMS (データベース管理システム) でうまく機能するクエリは、別のシステムではうまく機能しない場合があります。
  2. 同じ DBMS の以前のバージョンでは、Dekart 製品が後者ほど最適化されない場合があります。
  3. そしておそらく最も重要です。s を使用したクエリ構造JOINは、はるかに読みやすく、実行していることが理解できるため、クエリを変更しやすくなります。

JOIN全体として、代わりに sを使用することをお勧めします。

于 2013-10-20T14:27:39.603 に答える