web-dev-qa-db-ja.com

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

ですから、私はこの単純な質問に対する決定的な答えを読んで探して、最後の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句を使用するのと同じだと思っています。

85
Quang Van

MySQLでJOINを記述すると、非修飾はINNER JOINを意味します。つまり、INNER JOININNERはオプションです。 INNERCROSSはMySQLの同義語です。明確にするために、結合条件がある場合はJOINまたはINNER JOINを、条件がない場合はCROSS JOINと書きます。

結合に許可される構文は documentation で説明されています。


現時点では、スタンドアロンのJOINは、コンマとWHERE句を使用する(と同じ)だけであると考えています。


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

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

  • T1 JOIN T2 ON ...T1, T2 WHERE ...より読みやすくなっています。
  • テーブルのリレーションシップとフィルターが混在するのではなく、明確に定義されているため、メンテナンスが容易です。
  • JOIN構文は、コンマ構文よりも簡単にOUTER JOINに変換できます。
  • 同じステートメントでコンマとJOIN構文を混在させると、優先順位ルールのために奇妙なエラーが発生する可能性があります。
  • 結合句は忘れられているため、JOIN構文を使用するときにデカルト積を誤って作成する可能性は低くなります。これは、結合句が結合の隣に書き込まれ、欠落していることが簡単にわかるためです。
115
Mark Byers

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

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

0
Mchl