-3

ほとんどのRDBMSは、次の両方の構文をサポートしています。

SELECT ...
FROM table1 t1 JOIN table2 t2
ON t1.jfield = t2.jfield

と同様

SELECT ...
FROM table1 t1, table2 t2
WHERE t1.jfield = t2.jfield

個人的には、冗長性が少ないため後者のバージョンを好みますが、パフォーマンスとクエリの実行に違いはありますか?私はこのフォーラムの人々が2番目のスタイルは時代遅れであり、うまく機能しないと言っているのを見ました。

4

3 に答える 3

3

性能に違いはありません。しかし、堅牢性は非常に高いです。2 番目の例で WHERE 句を除外すると、不要なデカルト積が作成されます。最初の例で ON を省略すると、構文エラーが発生するだけです。これは 2 つのテーブルの結合では明らかかもしれませんが、テーブルが 10 個または 15 個になると、これらのエラーを見つけるのは難しくなります。

さらに、外部結合の使用を開始すると、使用LEFT OUTER JOINはすべての DBMS で機能しますが、DBMS 固有の外部結合構文は DBMS 固有のものです (たとえば、Oracle の(+)演算子は、実行できるすべてのことを実行できるわけではありませLEFT OUTER JOINん。

JOINそのため、キーワードの使用に慣れてください。

于 2012-11-08T20:07:22.093 に答える
1

両方の形式の実行計画を見ると、それらが同一であることがわかります (確かに MSSQL には当てはまりますが、すべてのデータベースではない場合は帽子をかぶるでしょう)。実行計画は同一であるため、パフォーマンスの違いはありません。 2つのフォームの間。

多くの人 (私を含む) が世界から第 2 形態を取り除こうとする理由は、次のとおりです。

  • 結合は 2 つのテーブル間の関係を表します
  • Where 句は結果セットのフィルターを定義します

これら 2 つは機能的に大きく異なり、2 番目の形式を使用すると、クエリを読んだり理解したりするのが非常に難しくなります。

于 2012-11-08T20:07:54.567 に答える
0

最初の構文を使用することをお勧めします。更新後のコーディングはうまくいきます。2番目の構文は本当に古く、すべての結果をテーブルとフィルターデータの後に結合するため、これを優先することはできません。間違っているかもしれませんが、インデックスとPKがある場合は、SQLサーバーがこの操作(並べ替え、フィルタリング、サブクエリなど)をより適切にサポートできるため、結合でパフォーマンスを向上させることができます。Where句は、データの最終結果をフィルタリングするためのものです。
JOINSは、すべてのテーブルの結果を結合するのではなく、必要に応じてフィルター処理されたデータのみを結合できるため、非常に強力なツールです。RAMまたはキャッシュに適している場合があります。

1番目-以下に示す構文のように、フィルター処理されたデータのみを追加できます -次の構文は、サブクエリも使用できます。フィルター処理された行のみを結合し、そのテーブルの特定の列のみを返します。
SELECT A., B.
FROM table_a as A
INNER JOIN table_B as B ON B.id = A.id -- join table b
AND B.name = 'bob' AND B.active = 1 -- lets filter more and return only rows for clause



SELECT a., b., c.flag
FROM table_a as a
INNER JOIN table_B as b ON b.id = a.id -- join table b
AND b.name = 'bob' AND b.active = 1 -- lets filter more and return only rows for clause
INNER JOIN (
SELECT id, flag
FROM table_C
WHERE active = 1
) as c ON c.id = a.id


そのシンプルで読みやすく、将来のコードの保守が簡単です。

このリンクを見てください、それは美しいコードではありませんか?
http://www.dpriver.com/products/sqlpp/sqlexamples4.php

WHERE句にx条件があるよりも...ofcここではagregateとsubqueryを使用できません...結合についてもっと学ぶことをお勧めします。プログラマーは幸せになるでしょう=]
http://www.w3schools.com/sql/ sql_join.asp

希望が役立ちます

于 2012-11-08T20:42:49.797 に答える