sql >> データベース >  >> RDS >> Mysql

SQLでは、JOINとCROSS JOINの違いは何ですか?

    SQLには次のタイプの結合があり、それらはすべて集合論から直接得られます。

    • 内部参加。
      From A inner join B はA∩Bと同等であり、両方のセットに共通の要素のセットを提供します。

    • 左外側の結合。
      From A left outer join B (A − B)∪(A∩B)と同等です。各Aは少なくとも1回表示されます。一致するBが複数ある場合、Aは一致するBごとに1回繰り返されます。

    • 右外側の結合。
      From A right outer join B (A∩B)∪(B − A)と同等です。これは、テーブル取引場所との左結合と同じです。各Bは少なくとも1回は表示されます。一致するAsが複数ある場合、各Bは一致するBごとに1回繰り返されます。

    • 完全な外部結合。
      From A full outer join B は(A − B)∪(A∩B)∪(B − A)と同等です。各Aと各Bは少なくとも1回は表示されます。 Aが複数のBと一致する場合、一致ごとに1回繰り返されます。 Bが複数に一致する場合一致ごとに1回繰り返されるため。

    • クロスジョイン。
      From A cross join B デカルト積を生成します A×B。各AはBごとに1回繰り返されます。Aが100行で、Bが100行の場合、結果セットは10,000行で構成されます。

    selectの理論的な実行に注意する必要があります クエリは、この順序で実行される次の手順で構成されます。

    1. fromのソースセットの完全なデカルト積を計算します 候補結果セットをプライミングする句。

    2. fromに参加基準を適用します 節を作成し、候補の結果セットを減らします。

    3. where clauseの基準を適用します 候補の結果セットをさらに減らすため。

    4. group byの基準に基づいて、候補の結果セットをグループに分割します 条項。

    5. group byに含まれる列以外の列を候補結果セットから削除します 句または集計関数の評価に関与します。

    6. 候補結果セットの各グループについて、そのような集計関数の値を計算します。

    7. 候補結果セットの各グループを、グループ化列と各集計関数の計算値で構成される単一の行に折りたたみます。候補の結果セットは、グループごとに1つの行で構成され、group by以外のすべての列が含まれるようになりました。 グループの集計関数の列または計算値が削除されます。

    8. havingの基準を適用します 候補の結果セットを減らし、最終的な結果セットを生成する句。

    9. order byの基準に従って最終結果セットを並べ替えます 節とそれを放出します。

    computeのようなものと関係がある、より多くのステップがあります およびcompute by 節ですが、これはそれがどのように機能するかについての理論的概念を得るのに十分です。

    また、最も単純な実装だけが実際にselectを評価することにも注意してください。 このように述べますが、生成される結果は、上記の手順を完全に実行した場合と同じである必要があります。



    1. パーティションスイッチングを使用した中断の少ないSQLServerテーブルの更新

    2. SQLServer2005のINSERTWHERECOUNT(*)=0でのUNIQUEKEY制約への違反

    3. TextFieldよりもURLFieldを使用する利点は?

    4. mysql_insert_idスレッドは安全ですか?