1. ホーム
  2. mysql

[解決済み] MySQLのJOINのデフォルトの動作はINNERとOUTERのどちらですか?

2022-11-12 14:44:29

質問

この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句を使うのと同じだと考えています。

どのように解決するのですか?

MySQLの記述で JOIN は、修飾されていないため INNER JOIN . つまり INNERINNER JOIN は省略可能です。 INNERCROSS は MySQL では同義語です。わかりやすくするために、私は 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構文を使用する際に、結合句を忘れたために誤ってデカルト積を作成する可能性は低くなります。なぜなら、結合句は結合の隣に書かれており、1つが欠けていても簡単に確認できるからです。