MySQLのデフォルトのJOIN動作は、INNERまたはOUTERですか?


91

それで、私はこの1時間インターネットを見て、この単純な質問に対する決定的な答えを読んで探しました。

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

SELECT * FROM t1 JOIN t2

それは同じです

SELECT * FROM t1, t2

OR

SELECT * FROM t1 INNER JOIN t2

また、関連する質問として、「WHERE」句を使用する場合、それはJOINまたはINNER JOINと同じですか。

現在、スタンドアロンのJOINは、コンマとWHERE句を使用することと同じだと思います。

回答:


123

MySQLでは、JOIN無資格の記述はを意味しINNER JOINます。つまり、INNERin INNER JOINはオプションです。INNERそして、CROSSMySQLでの同義語です。わかりやすくするために、JOINまたはINNER JOIN結合条件があるかどうかCROSS JOIN、条件がないかどうかを記述します。

結合に使用できる構文は、ドキュメントに記載されています


現在、スタンドアロンのJOINは、コンマとWHERE句を使用する(同一)に過ぎないと考えています。


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

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

  • T1 JOIN T2 ON ... より読みやすい T1, T2 WHERE ...
  • テーブルのリレーションシップとフィルターが一緒に混合されるのではなく明確に定義されているため、より保守しやすくなります。
  • JOIN構文は、コンマ構文よりもOUTER JOINに変換する方が簡単です。
  • 同じステートメント内でコンマとJOIN構文を混在させると、優先ルールが原因で奇妙なエラーが発生する可能性があります。
  • 結合句が忘れられているため、JOIN構文を使用しているときに誤ってデカルト積を作成する可能性は低くなります。結合句は結合の隣に記述されており、欠落しているかどうかを簡単に確認できるためです。

この単純な質問を明確にしてくれてありがとう:)過去には常にコンマ+ WHERE句を使用してきましたが、アドバイスに従ってJOINを使用するように変換します。ありがとう
Quang Van

ちょっとマーク、JOINとコンマの組み合わせでどういう意味ですか。このようなクエリを組み合わせて、SELECT * FROM t1 LEFT JOIN(t2、t3、t4)ON(t2.a = t1.a AND t3.b = t1.b AND t4.c = t1.c)?
Quang Van

2
@Quang:たとえば、これは失敗します:SELECT * FROM t1, t2 JOIN t3 ON t1.x=t3.y WHERE t1.a = t2.b
Mark Byers

0

これらはすべて同等であり、 CROSS JOINます。

コンマと[INNER | CROSS] JOIN構文の使用にはいくつかの違いがあります。これは、より多くのテーブルを結合するときに重要になる場合があります。あなたが知る必要があるほとんどすべては、MySQLのJOINドキュメントでここに説明されています


1
^ ---質問への回答は結合(スタンドアロン)は基本的にINNERおよびコンマ+ WHERE句と同じです
Quang Van
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.