1

重複の可能性:
WHERE 句は、IN および JOIN の前、または
INNER JOIN と WHERE 句の後に実行する方が適切です — 何か違いはありますか?

もしあれば、次の違いは何ですか?

Select 
  col1, 
  col2 
from TableA A, TableB B
where A.ID = B.ID

Select 
  col1, 
  col2
From TableA A
Inner Join TableB B on A.ID = B.ID

それらは SQL で同じ動作をしているように見えますが、

4

4 に答える 4

0

それらは、RDBMSによって同じものに最適化される可能性があります。それらは両方とも基準JOINに関する表です。A.ID = B.ID

ただし、JOIN構文は明示的であり、正しいと見なされます。

于 2011-05-03T21:31:23.463 に答える
0

最初の構文は、(ご指摘のとおり)2つのテーブルのクロス結合またはデカルト積です。オプティマイザがない(またはオプティマイザが不十分な)システムでは、これにより、最初のテーブルのすべてのレコードと2番目のテーブルのすべてのレコードの組み合わせが生成され、WHERE句に一致するレコードだけにフィルタリングされます。

両方のステートメントからの出力は同じになり、使用しているシステムに優れたオプティマイザーがあれば、パフォーマンスも同じになります。

私が提供する2つのコメント:

1)ステートメントを書くときはあなたの意図を明確にする方が良いと思います。INNER JOINを実行する場合は、INNERJOIN構文を使用してください。未来の6ヶ月形は今からありがたいです。

2)SQL Serverのオプティマイザは、この状況でINNER JOINを実行します(少なくとも最近のバージョンでは、すべてのバージョンを保証することはできません)が、パスがSQL Serverエンジンのバージョンに依存し、将来的に同じであるとは限りません(この状況で変更されるとは思えませんが、入力にかかる文字数が実際にそれほど高くなるのでしょうか?)

于 2011-05-03T22:38:50.763 に答える
0

@ypercubeは、あなたの質問が2つの異なるINNERJOIN構文についてであることを正しく指摘しました。外部結合構文はありません。@Matt Whitfieldが指摘したように、最初の構文はANSI-92で、2番目の構文はANSI-89スタイルです。より複雑なクエリでは、ANSI-92構文の方がはるかに読みやすいというマットに完全に同意します。

さらに、SQL Serverのバージョンによっては、ANSI-89構文が非推奨になり、問題が発生する可能性があります。SR0010を参照してください。テーブルまたはビューを結合するときに非推奨の構文を使用しないでください 。実際、次のバージョンのSQL 2011、Denali、または私たちが呼んでいるものでは、ANSI-89構文はサポートされません。参照:SQL Serverの次のバージョンでサポートされていない機能 (「参加」という単語を検索してください)。

于 2011-05-03T22:39:31.513 に答える
0

前者は ANSI-89 構文で、後者は ANSI-92 構文です。ANSI-92 構文で表現すると、外部結合を使用し始めるとより明確になるため、ほとんどの場合、後者を使用する必要があります。

于 2011-05-03T22:25:31.103 に答える