2012-04-18 11 views
0

このクエリの違いは何ですか?どちらを選ぶべきですか?mysql SELECT "FROM t1、t2" - または - "FROM t1 JOIN t2 ON"

SELECT 
t1.*, 
t2.x 
FROM 
t1, 
t2 
WHERE 
t2.`id` = t1.`id` 

または

SELECT 
t1.*, 
t2.x 
FROM 
t1 
INNER JOIN             # LEFT JOIN ? 
t2 
ON t2.`id` = t1.`id` 

コンマを使用していLEFT JOINSを使用するよりも、同じ効果を持っていますか?

これは恥ずかしいです。私がこれについて何年も前から尋ねたのは初めてのことです。私は最初のバージョンを使用したことがありますが、今私は最初のSQL誘導でいくつかの行を見逃したように感じています。 ;)

+0

[INNER JOIN ONとWHERE節の可能な重複](http://stackoverflow.com/questions/1018822/inner-join-on-vs-where-clause) –

答えて

0

"カンマ"構文は、INNER JOIN構文と同等です。クエリオプティマイザは、クエリの実行方法に関係なく、同じクエリを実行する必要があります。 JOIN言語を使用して結合を行い、WHERE言語を使用してフィルタリングを行うと、意図がより明確になります。

0

クエリは同じです。最初のものは2番目の短い構文です。 LEFT JOINはまったく異なるものです。

INNER JOINは、両方のテーブルに共通するレコードのみを表示します。 LEFT JOINは、左側のテーブルからすべてのレコードを取り出し、右側のテーブルのレコードと一致させます。右側の表のレコードが一致しない場合は、代わりにNULLが選択されます。

0

内側の結合は、空の(nullの)結果をスキップして第2のテーブルに残す結合です。

クエリオプティマイザには、where句を使用してすべてを実行すると、より多くの可能性があります。いくつかのrdbmsは自然結合や他の結合のようなコマンドをサポートしていないので、 "where"は本当に頼りになるものです。

0

最初のクエリはカートリジッククエリと呼ばれ、通常は大きなデータベースに望ましくない結果をもたらします。

代わりに、ジョインを使用すると、まさにあなたが望むものが得られます。

関連する問題