2010-11-29 6 views
3

可能性の重複:
Is there something wrong with joins that don't use the JOIN keyword in SQL or MySQL?SQL - JOINの利点?

こんにちは、合流せず

i'ave常に取得したデータ...

だが上の1つの方法の利点がありますもうひとつ?

select * from a INNER JOIN b on a.a = b.b; 

select a.*,b.* from a,b where a.a = b.b; 

ありがとうございます!

+1

この質問に類似していない場合は、次のようにします。http://stackoverflow.com/questions/128965/is-there-something-wrong-with-joins-that-dont-use-the-join-keyword- in-sql-or-mys – ZoFreX

+3

これらは両方とも結合です... – Donnie

答えて

0

これらはいずれも結合です。それらはジョインの2つの異なる構文表現です。最初の1つは(「結合」キーワードを使用して、現在のANSI標準です(1992年現在)。

内部結合のの場合は、の2つの差分表現は機能的には同じですが、 ANSI SQL92の標準構文は、それぞれの結合条件が結合されている中間結果セットのペアに関連付けられているため、モアレを読みやすくなります。以前の表現では、結合条件はすべて全体のクエリとともにまとめられています'フィルタ条件、where句では、それはどちらがどのように明確ではありません。これにより、悪い結合条件(例えば、意図しないデカルト積が生成されるなど)をはるかに困難にすることができます。

しかし、もっと重要なのは、おそらく、参加を行っ外、ということで、特定のシナリオでは、古い構文はequivilentされておらず、実際にはWRONG結果セットを生成します。

すべてのクエリの新しい構文に移行する必要があります。

0

あなたは常にジョインでデータを取得しました。 2番目のクエリは古い構文を使用していますが、バックグラウンドではまだ結合しています。

2

私は最大の利点は読みやすさです。明示的に名前を付けられた結合タイプを持つバージョンは私が理解するのがずっと簡単です。

8

INNER JOINキーワードを使用して第1の方法は次のとおりです。

  • ANSI SQL標準
  • 私が使用した2番目のオプションを見たときにそのため、私はいつもうんざり

ずっとクリーンでより表現 - それをWHERE句を膨らませるだけで、テーブルがどのフィールドにどのように結合されているかを一目で分かりません。

長いリストのWHERE句の中でJOIN条件の1つを忘れると、突然乱雑なデカルト積が発生します..... INNER JOINキーワードでこれを行うことはできません。 (に参加する)。

+0

古い構文が実際に読みやすい状況があります。そして、通常は個人の好みの問題です。 –

1

JOINでは、基本的に異なる構文を使用しています。ベストプラクティスの観点からは、最初の構文(明示的JOIN)を使用することが最善です。なぜなら、クエリの意図がより明確であり、コードをより簡単に維持できるからです。

0

これはRDBMSに依存しますが、SQLサーバーの場合、前の構文を使用すると最適化が向上することが理解できます。これは、SQLの質問とベンダー特有の質問のほうが少ないです。

違いがあるかどうかを理解するのに役立つEXPLAIN(SQL Server:Query Execution Plan)型の関数を使用することもできます。それぞれのクエリは一意であり、保存された統計情報がその動作を変更できると思います。