3

これら 2 つのクエリは互いに異なりますか?

クエリ 1:

SELECT * FROM Table1, Table2 WHERE Table1.Id = Table2.RefId

クエリ 2:

SELECT * FROM Table1 INNER JOIN Table2 ON Table1.Id = Table2.RefId

両方の方法を分析したところ、明らかに同じ実際の実行計画が作成されました。内部結合を使用するとより効率的に機能するケースを知っていますか? 「クエリ1」のやり方に近づくのではなく、内部結合を使用することの本当の利点は何ですか?

4

6 に答える 6

3

ご提供いただいた 2 つのステートメントは、機能的には互いに同等です。

この違いは、SQL 構文の標準が異なるために発生します。

非常にエキサイティングな読み物として、次のウィキペディアのリンクにアクセスして、さまざまな SQL 標準を調べることができます。右側には、SQL のさまざまな方言/標準への参照とリンクがあります。

http://en.wikipedia.org/wiki/SQL

于 2009-09-02T14:51:23.360 に答える
3

これらの SQL ステートメントは同義ですが、INNER JOIN を指定する方法が推奨され、ISO 形式に従います。where句からテーブルを結合する配管が制限され、クエリの目標がより明確になるため、私もそれを好みます。

于 2009-09-02T14:53:28.583 に答える
1

これらは同一のクエリ プランになりますが、INNER JOIN、OUTER JOIN、CROSS JOIN キーワードは、コードを明確にするため、優先されます。

FROM 句でキーワードを使用して結合ヒントを指定することもできますが、WHERE 句でより複雑な結合を行うこともできます。ただし、それ以外の場合、クエリ プランに違いはありません。

于 2009-09-02T14:50:32.787 に答える
1

また、最初の構文は、クエリが複雑になるにつれて、不注意によるクロス結合の影響を受けやすくなることも付け加えておきます。さらに、この構文の左結合と右結合は SQL サーバーでは正しく機能しないため、使用しないでください。左結合を追加するときに構文を混在させると、クエリが結果を正しく返さないという問題が発生する可能性もあります。最初の例の構文は 17 年前から古くなっています。これを使用する理由はありません。

于 2009-09-02T14:56:23.027 に答える
0

クエリ 1 は古い構文スタイルと見なされ、その使用はお勧めできません。その構文スタイルを使用して LEFT および Right 結合を使用すると、問題が発生します。また、SQL Server では、異なる形式のビューを使用するクエリでこれら 2 つの異なるスタイルを混在させると問題が発生する可能性があります。

于 2009-09-02T14:56:25.943 に答える