2012-04-20 6 views
9

可能性の重複:
Explicit vs implicit SQL joins
Is there a difference using join andselect from multi-tables?
SQL Joins: Future of the SQL ANSI Standard (where vs join)?シンプルなSQL Join Understanding?

FROM句でJOINと複数のテーブルを宣言するの違いは何ですか?比較

SELECT * 
FROM table1 AS t1, 
     table2 AS t2 
WHERE t1.id = t2.id 

:など

明示JOINと第二版、

SELECT * 
FROM table1 AS t1 
INNER JOIN table2 AS t2 ON t2.id = t1.id 
+9

問題を引き起こし=ステートメントを追加することを忘れしやすい。..第二文の間違った得るために読みやすくし、難しい... SQL [の –

+0

が重複する可能性がジョイン:SQL ANSI規格(どこの未来をvs join)?](http://stackoverflow.com/questions/3684259/sql-joins-future-of-the-sql-ansi-standard-where-vs-join)または[MySQL:Inner join vs Where]( http://stackoverflow.com/questions/5273942/mysql-inner-join-vs-where)SQL ServerとMySQLをタグに入れたり、[Explicit vs暗黙的SQL結合](http:// stackoverflow。com/questions/44917/explicit-vs-implicit-sql-joins) –

答えて

8

と結合条件は、標準SQLです。

WHERE句を使用した暗黙的な結合構文は、廃止された構文(または、むしろ悪いとみなされます)です。部分的にWHERE句を忘れてデカルト積を生じるためです。

2

どちらも出力されますが、クエリの記述方法はまったく異なります。

SELECT * 
FROM table1 AS t1 
INNER JOIN table2 AS t2 ON t2.id = t1.id 

LEFT、OUTER、INNERのように、使用している結合の種類を明示的に指定しているため、優先する結合方法です。

3

なぜ新しい構文を使用しますか?

他の人が述べているように、新しい構文が優先されます。大きなクエリでは新しい構文は、デバッグを読み、参加基準を確保する方が簡単です何の偶然のCROSS JOINSを意味していない(追加されます。

(インナー用に合流する)非推奨の古い構文ですか?

によりません

"新しい構文を使用する"のコンセンサスはどのくらい合意していますか?表示?

+0

この回答に「偶然のクロスジョイン」の例を定義できますか? – KDawg

+0

私もこれを読んだことがあります。「基本的に古い構文はCROSS JOINに相当します。なぜ、INNER JOINが必要なときにCROSS JOINをコード化しますか?ここ>>> http://www.sqlservercentral.com/blogs/brian_kelley/2009/09/30/the-old-inner-join-syntax-vs-the-new-inner-join-syntax/ しかし私はそれがどのように "クロスジョイント"を引き起こすのかを見るのに苦労しています – KDawg

+1

@KDawg - 新しい構文を構文上正しいものにするためには 'on'キーワードが必要です(' INNER JOIN tableA ** ON ** ' 。古い構文では、あなたのクエリは 'where'節なしでコンパイル&実行されます。ここでの簡単な例では、「どのように結合基準を逃すことができますか」と言うのは簡単ですが、より複雑な問合せでは、テーブルのリストとwhereが11-gazillion行のSQLで区切られていると、 – EBarr