MySQL の A
        LEFT JOIN B join_condition
            テーブル B はテーブル
            A と
            A
            が依存するすべてのテーブルに依存するように設定される。
          
            テーブル A
            は、LEFT JOIN
            条件で使用されるすべてのテーブル
            (B を除く)
            に依存するように設定される。
          
            LEFT JOIN
            条件は、テーブル B
            からのレコードの取り出し方法の判定に使用される。(言い換えると、WHERE
            節の条件はいずれも使用されない)。
          
あるテーブルがすべてのテーブルの後に読み取られる場合を除き、通常の最適化すべてが行われる。依存関係が循環している場合は、MySQL からエラーが出力される。
            標準の WHERE
            最適化すべてが実行される。
          
            A に
            WHERE
            節の条件にマッチするレコードがあり、B
            に ON
            条件にマッチするレコードがない場合、B
            のカラムの値が
            NULL
            に設定されたレコードが生成される。
          
            テーブルのいずれかに存在しないレコードを検索する際に
            LEFT JOIN
            を使用した場合:
            col_name
            IS NULLWHERE
            節内で、NOT NULL
            と定義した col_name
            を column_name IS NULL で評価した場合、MySQL は
            LEFT JOIN
            条件に一致するレコードを 1
            つ検索すると、その後はレコードの検索
            (特定のキー組み合わせの) を停止する。
          
        RIGHT JOIN の実装は
        LEFT JOIN
        と類似しています。
      
        
        結合オプティマイザがテーブルの結合順序を計算します。テーブル読み取り順序は
        LEFT JOIN と
        STRAIGHT_JOIN
        によって強制されるため、確認対象のテーブル順列が減少し、結合オプティマイザ
        (テーブルの結合順序を計算する)
        の動作の速度がさらに上がります。LEFT
        JOIN が d
        の前に読み取るように強制するため、MySQL では
        b
        の完全スキャンが実行されることに注目してください。
      
SELECT * FROM a JOIN b LEFT JOIN c ON (c.key=a.key) LEFT JOIN d ON (d.key=a.key) WHERE b.key=d.key;
        この場合の修正は逆さに行われ、a
        と b が
        FROM
        節でリストされています。
      
SELECT * FROM b JOIN a LEFT JOIN c ON (c.key=a.key) LEFT JOIN d ON (d.key=a.key) WHERE b.key=d.key;
        LEFT JOIN
        にとって、生成された
        NULL 行で
        WHERE 条件が常に false
        である場合、LEFT JOIN
        は通常の結合に変更されます。たとえば、t2.column1
        カラムが NULL
        であるとすると、次のクエリーの
        WHERE 節は false
        になります:
      
SELECT * FROM t1 LEFT JOIN t2 ON (column1) WHERE t2.column2=5;
よって、通常の結合に変換しても問題ありません。
SELECT * FROM t1, t2 WHERE t2.column2=5 AND t1.column1=t2.column1;
        
        これでクエリーが改善できる場合、MySQL
        がテーブル t1
        を読み取る前にテーブル
        t2
        を使用できるようになるため速度が向上します。テーブルの結合順序についてヒントを指定するには、STRAIGHT_JOIN
        を使用します。詳細は、項8.2.8. 「SELECT 構文」
        を参照してください。
      

