「良い」または「悪い」結合タイプはありません。それらは異なる意味を持ち、それに応じて使用する必要があります。
あなたのケースでは、あなたはおそらくノーwork_log(そのテーブルに行)を持つ従業員を持っていないので、LEFT JOIN
とJOIN
の結果に等しくなります。ただし、そのようなものがあった場合(work_logが登録されていない新しい従業員)、JOIN
その従業員は省略されますが、左結合(最初のテーブルは従業員)はすべてを表示し、存在する場合はwork_logのフィールドにnullを表示します一致しません。
繰り返しになりますが、パフォーマンスはクエリの正確性にとって二次的なものです。LEFT JOIN
s を使うべきではないと言う人もいます。LEFT JOINがオプティマイザに特定の順序でクエリを実行することを強制し、場合によっては一部の最適化(テーブルの並べ替え)を妨げることは事実です。一例を示します。しかし、INNER JOINは本質的に悪くないので、正確性/意味が犠牲になる場合は、どちらか一方を選択しないでください。残りの通常の最適化は通常どおり適用されます。
要約すると、LEFT JOIN
本当に意味がある場合は使用しないでくださいINNER JOIN
。
MySQLではCROSS JOIN
、INNER JOIN
とJOIN
同じです。標準では、意味的には、a CROSS JOIN
は句INNER JOIN
なしなON
ので、テーブル間の行のすべての組み合わせを取得します。
あなたは持っているウィキペディアに参加するすべてのセマンティックタイプの例を。実際には、MySQLでは、とのみを記述する傾向がJOIN
ありLEFT JOIN
ます。