LEFT JOINを押すか、追加のテーブルを選択するだけですか?

私は明示的にLEFT JOINと言うだけでなく、単に互いに値を結合することの間のスピードについて疑問に思っています。ここでは、

SELECT example.id FROM example
LEFT JOIN finals ON example.id = finals.account_id";

SELECT example.id, finals.account_id
FROM example, finals
WHERE example.id = finals.account_id

私は、最初は速いとはほとんど確信していますが、私はそれを示唆する答えを見つけることができません。 (私は実際に何を 'コール'して2番目のものかを実際には分かっていない、私はそれをソフトジョインと呼びます)

0
Oof、私の間違い。
追加された 著者 Vael Victus,
重複または同様の質問: stackoverflow.com/questions/894490/…
追加された 著者 jli,

4 答え

2番目は INNER JOIN (デフォルト)であり、出力よりスピードの問題は少ないです。内部結合は、指定されたフィールドが両方のテーブルのどこにあるかを返すだけです。

account_id が3の example レコード#3ではなく finals レコードがある場合、

一致するファイナルレコードがない場合でも LEFT JOINexample のレコードをリストします - 欠落しているフィールドはNULLに設定されます

2
追加された

これらのクエリには semic の違いがあります。

最初の結合は、左の表のすべての行を含むOUTER JOINです。 2番目はINNER JOINであり、一致しない行は含まれません。

LEFT JOIN の代わりに JOIN を記述した場合は、読みやすさと保守性のために最初の構文が優先される点を除いて、2つのクエリは同じです。

私は実際に何を 'コール'するのかは分かりませんが、ソフト・ジョインと呼んでいます)

2番目の構文は、MySQLが "カンマ演算子"と呼ぶものを使用します。これは、暗黙的な結合と呼ばれることもあります。 ANSI-89 join とも呼ばれます。

2
追加された

異なる結果をもたらすので、2つのスピードを実際に比較することはできません。 2番目のクエリでは、両方のテーブルにエントリが必要です。最初のクエリでは、最初のテーブルのエントリのみが必要です。

2番目のクエリはCROSS JOINを使用しています(mysqlのJOINとの違いはありません..カンマはON句のないJOINのエイリアスです)。

0
追加された

この2番目の例は、INNER JOINを実行し、潜在的に異なる結果を返します。

0
追加された
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com