誰かがJOINで相関サブクエリを使用することの違いを教えてもらえますか?同じ問題を解決するためのものではありませんか。パフォーマンスヒットオーバー1はありますか。私はSQLサーバーを使用しており、サブクエリで発生する複数の列を選択するためにFOR XML PATH('')を使用する傾向があります。違いを説明するための例をいただければ幸いです。
2 に答える
いつものように、コース用の馬です。
ただし、SQL Server のセットベースの操作を使用して 2 つのデータ ストリームを一致させることができるため、JOIN を使用してそれを行うことができれば、よりうまく機能するというゆるい規則があります。
ただし、相関サブクエリは特定の問題を解決する唯一の方法ですが、行ごとに 1 つずつ、ループのような動作が発生し、必然的に遅くなり、パフォーマンスが低下します。
「JOIN に対して相関サブクエリを使用することの違いを教えてください。同じ問題を解決するためのものではありませんか?」
いいえ、そうではありません。
相関サブクエリを使用すると、リレーショナル代数の SEMIJOIN または SEMIMINUS の呼び出しの式を取得できます。(ここでは、相関サブクエリの最も一般的な使用法について話していることに注意してください。)
SELECT * FROM A1
WHERE attr in (SELECT attr FROM A2);
A1 に表示される列のみを示します。JOIN を書いた場合に得られるものとは異なります
SELECT * FROM A1 NATURAL JOIN A2
これにより、A1 には表示されない A2 の追加の列も表示されます。
と
SELECT * FROM A1
WHERE attr NOT IN (...)
も相関サブクエリを含みますが、今回は JOIN としても記述できないセミマイナス呼び出しです。
最後に、相関サブクエリも SELECT リストに表示できます。
SELECT a,b, ( SELECT MIN(b) FROM T AS sub WHERE sub.a=main.a AND sub.b>main.b )
FROM T AS main
この場合も、この性質の多くのクエリは JOIN として記述できません。