2012-07-18 8 views
14

に参加私は2つのSQL文を結合を選択している:差が参加し、場所を選択するには、SQL文

select a.id from table_a as a, table_b as b where a.id=b.id; 
select a.id from table_a as a inner join table_b as b on a.id=b.id; 

はもちろん、彼らが結果は同じです。しかし、パフォーマンス、移植性などの点で違いがあります。

+0

多くのDBシステムまたはSQL Server(Microsoft製品)に実装されている言語としてSQLを参照しているかどうか不明です。 –

+0

MySQL、SQL Server、Oracle、DB2などほとんどのDBRMSの場合 –

答えて

16

1つの違いは、最初のオプションはwhere句で結合条件を表すことによってインテントを隠すことです。

結合条件が書き出される2番目のオプションは、ユーザーがクエリを読み込んだ場合にはより明確です。これは、クエリの正確なインテントを示します。

性能やその他の相違がある限り、何もあるべきではありません。両方のクエリは、同じ結果を返し、ほとんどのRDBMSで同じ結果を返さなければなりません。

0

どちらも標準SQLです。異なるDBシステムでは、それらを異なる方法で最適化することができますが、単純すぎるため、そうした場合には少し驚いています。しかし、それはSQLの本質です。それは宣言的なものであり、その実装はクエリの実行方法に多大な余裕を与えます。これらが同じ動作をするという保証はなく、異なる場合はどちらが速いかは保証されません。

+0

あなたは、これらが同じであるという保証はないと言いました。例を挙げていただけますか? –

+0

申し訳ありませんが、私は "これらが同じことをするという保証はありません"という意味で、私は答えを修正しました。 –

0

これらは、SQLサーバーとまったく同じです。パフォーマンスの違いはありません。

3

内部結合構文は、1990年代にSQLに追加されました。オプティマイザは、結合条件にwhere句を使用した古い構文よりも、オプティマイザでよりうまくいく可能性はありますが、そうではありません。

これは現在のように、両方とも可搬性が高いはずです。

内部結合構文は、読者にとってはより容易であるため、他のものが既に注目しているため、好ましいものです。

関連する問題