2010-12-11 10 views
68

私は最後の1時間をインターネットで見てきました。この単純な質問に対する決定的な答えを読んで探しています。デフォルトのMySQL JOIN動作、INNERまたはOUTERとは何ですか?

MySQLのデフォルトのJOINは何ですか?

SELECT * FROM t1 JOIN t2 

は同じ関連する質問、あなたは "WHERE" 句を使用しても
SELECT * FROM t1, t2 

OR 

SELECT * FROM t1 INNER JOIN t2 

として、それは同じであるということであるJOINまたはINNER JOINを?

私はスタンドアロンのJOINはカンマとWHERE節を使用するのと同じだと考えています。

答えて

87

MySQL書込みJOINは、修飾されていないことを意味します。INNER JOIN。つまり、INNERINNER JOINはオプションです。 INNERCROSSはMySQLの同義語です。分かりやすくするために、私は結合条件があればJOINまたはINNER JOIN、条件がない場合はCROSS JOINと書いています。

結合の構文は、documentationに記載されています。


今私は、スタンドアローンを考えているが、コンマと句を使用して(と同じ)以外の何ものでもありません登録しよう。


効果は同じですが、その背後にある歴史は異なっています。コンマ構文は、ANSI-89標準からのものです。しかし、この構文には多くの問題があります。そのため、ANSI-92標準ではJOINキーワードが導入されました。

常にはカンマではなくJOIN構文を使用することを強くお勧めします。

  • T1 JOIN T2 ON ...T1, T2 WHERE ...より読みやすいです。
  • テーブル関係とフィルタが混在しているのではなく明確に定義されているため、メンテナンスが容易です。
  • JOIN構文は、カンマ構文よりOUTER JOINに変換する方が簡単です。
  • 同じ文でカンマとJOINの構文を混在させると、優先順位の規則のために不思議なエラーが発生する可能性があります。
  • JOIN構文を使用するときに、忘れた結合句のために誤ってデカルト積を作成する可能性は低くなります。なぜなら、結合節は結合の隣に書き込まれており、欠落していれば分かりやすいからです。
+0

甘い、この簡単な質問を明確にしてくれてありがとう:)私はいつもカンマ+あなたのアドバイスごとにJOINを使用するように変換されます。ありがとう –

+0

こんにちはマーク、JOINとカンマのミックスはどういう意味ですか? SELECT * FROM t1 LEFT JOIN(t2、t3、t4) ON(t2.a = t1.a AND t3.b = t1.b AND t4.c = t1.c)? –

+2

@Quang:これは例えば失敗します: 'SELECT * FROM t1、t2 JOIN t3 ON t1.x = t3.y WHERE t1.a = t2.b' –

0

これらはすべて同等であり、CROSS JOINにも等しくなります。

コンマと[INNER | CROSS] JOINの構文にはいくつかの違いがありますが、これは複数の表を結合するときに重要になる場合があります。あなたが知る必要があることは、MySQL JOIN documentationに記載されています。

+0

基本的にはい。 – Mchl

+1

^---質問への回答は基本的にJOIN(スタンドアロン)です。INNERとカンマ+句の部分は同じです –