31

見つかったクエリでCROSS JOIN安全に置き換えることができるかどうか疑問に思っています。INNER JOIN

INNER JOINなしONまたはUSINGまったく同じですかCROSS JOIN?はいの場合、CROSS JOINタイプはクエリで意図をより適切に表現するためにのみ発明されましたか?

この質問の付録は次のとおりです。

CROSS JOIN ... WHERE x、 またはを使用するときに、最新の広く使用されているDBMSを使用する場合に違いはありますINNER JOIN ... ON ( x )INNER JOIN ... WHERE ( x )

ありがとうございました。

4

2 に答える 2

28

最新のすべてのデータベースでは、これらすべての構成が同じ計画に最適化されています。

一部のデータベース(など)では、の後に条件SQL Serverが必要なため、3番目のクエリはそこで解析されません。ONINNER JOIN

テーブルの可視性スコープはJOIN順番に並んでいるため、次のクエリを実行します。

SELECT  *
FROM    s1
JOIN    s2
ON      s1.id IN (s2.id, s3.id)
CROSS JOIN
        s3

これは解析されませんが、これは次のとおりです。

SELECT  *
FROM    s2
CROSS JOIN
        s3
JOIN    s1
ON      s1.id IN (s2.id, s3.id)

意思。

于 2011-04-21T09:36:57.053 に答える
2

生のクロス結合は、where 句がない結合であり、左側または右側のデータがない場所に null が挿入されて結合されている左右のテーブルのすべての組み合わせに対して 1 つのレコードが生成されることを意味します。

where 句をクロス結合に追加すると、where 句は内部結合の ON と同じことを行うため、これは内部結合と同等になります。

ただし、内部結合は、ON 条件を残りの where 句から分離して理解しやすくするため、一般的に使用する方が適しています。

于 2011-04-21T09:46:21.663 に答える