MySQL では、SELECT
          ステートメントでの以下の JOIN
          構文の使用をサポートしています。
        
table_reference, table_reference
table_reference [INNER | CROSS] JOIN table_reference [join_condition]
table_reference STRAIGHT_JOIN table_reference
table_reference LEFT [OUTER] JOIN table_reference [join_condition]
table_reference NATURAL [LEFT [OUTER]] JOIN table_reference
{ OJ table_reference LEFT OUTER JOIN table_reference ON conditional_expr }
table_reference RIGHT [OUTER] JOIN table_reference [join_condition]
table_reference NATURAL [RIGHT [OUTER]] JOIN table_reference
table_name [[AS] alias] [[USE INDEX (key_list)] | [IGNORE INDEX (key_list)] | [FORCE INDEX (key_list)]]
          join_condition
          は次のように定義します。
        
ON conditional_expr | USING (column_list)
          結果セットに含めるレコードを制限するために使用する
          ON
          部分には、通常、条件は何も指定しません。それらの条件は
          WHERE
          節で指定します。ただし、この規則には例外があります。
        
          注意:INNER JOIN 構文で
          join_condition
          を使用できるのは、MySQL 3.23.17
          以降に限られます。同様に、JOIN
          と CROSS JOIN に関しても、MySQL
          4.0.11 以降でのみ条件を指定できます。
        
          上の構文リストの最後に挙げた LEFT OUTER
          JOIN 構文は、単に ODBC
          との互換性を確保するためのものです。
        
              テーブル参照では、tbl_name AS
              alias_name または tbl_name
              alias_name
              を使用してエイリアスを指定することができる。
            
mysql>SELECT t1.name, t2.salary FROM employee AS t1, info AS t2->WHERE t1.name = t2.name;
              ON
              条件句には、WHERE
              節で使用できる形式の任意の条件を指定できる。
            
              LEFT JOIN の ON
              または USING
              部分に右側のテーブルにマッチするレコードがない場合、すべてのカラムを
              NULL に設定した 1
              つのレコードが右側のテーブルとして使用される。この規則に基づいて、対応するレコードが別のテーブルに存在しないレコードをテーブル内で検索することができる。
            
mysql>SELECT table1.* FROM table1->LEFT JOIN table2 ON table1.id=table2.id->WHERE table2.id IS NULL;
              この例では、table2
              に存在しない id
              値を持つすべてのレコード(table2
              に対応するレコードがないすべてのレコード)が
              table1
              で検索される。当然、この場合、table2.id
              が NOT NULL
              として宣言されていることが前提となる。
              See 項5.2.7. 「MySQL による LEFT JOIN と RIGHT
        JOIN の最適化」。
            
              USING (column_list)
              節に指定するカラムリスト内のカラムは、両方のテーブルに存在しなければならない。次の
              2 つの節は同じことを意味する。
            
a LEFT JOIN b USING (c1,c2,c3) a LEFT JOIN b ON a.c1=b.c1 AND a.c2=b.c2 AND a.c3=b.c3
              2 つのテーブルの NATURAL [LEFT]
              JOIN
              の定義は、両方のテーブルに存在するすべてのカラムを指定した
              USING 節を持つ INNER
              JOIN または LEFT JOIN
              と同じ意味になる。
            
              
              INNER JOIN と
              ,(カンマ)は、結合条件が指定されていない場合、同じ意味になり、どちらについても、指定されたテーブル間でデカルト積が生成される(つまり、最初のテーブルの各レコードが
              2
              番目のテーブルのすべてのレコードに結合される)。
            
              RIGHT JOIN は LEFT
              JOIN
              の類似機能。コードをデータベース間で移植可能にするには、RIGHT
              JOIN ではなく LEFT JOIN
              を使用するようにする。
            
              
              STRAIGHT_JOIN は
              JOIN
              と同様のものだが、異なる点として、STRAIGHT_JOIN
              では常に右側のテーブルの前に左側のテーブルが読み取られる。この構文は、結合オプティマイザによってテーブルが誤った順序で並べられるといった(まれな)事態に対処するために使用できる。
            
              
              
              
              MySQL バージョン 3.23.12
              以降では、テーブルからのデータの取り出し時に、どのインデックスを使用すべきか
              MySQL
              に知らせるためのヒントを指定することができる。これは、EXPLAIN
              で MySQL
              が使用可能なインデックスのリストの中から誤ったインデックスを使用していることが明らかになったときに役立つ。USE
              INDEX (key_list)
              と指定することによって、使用可能なインデックスの中から特定のインデックスを使ってテーブル内のレコードを検索するよう
              MySQL に指示できる。もう 1 つの IGNORE
              INDEX (key_list)
              構文は、特定のインデックスを使用しないよう
              MySQL に指示するときに使用する。
            
              MySQL 4.0.9 では、FORCE INDEX
              も使用できる。これは USE INDEX
              (key_list)
              と同じように動作するが、異なる点として、この構文の場合、テーブルのスキャンは非常にコストがかかるといいう前提に立つ。つまり、テーブルのスキャンが実行されるのは、どのインデックスを使用してもテーブル内のレコードを検索できない場合に限られる。
            
              USE/IGNORE KEY は USE/IGNORE
              INDEX のシノニム。
            
          注意:
          USE/IGNORE/FORCE INDEX は、MySQL
          でテーブル内のレコードの検索方法と結合の実行方法を決めるときにどのインデックスを使用するか、という点にのみに影響します。ORDER
          BY や GROUP BY
          の解決時にインデックスを使用するかどうかには影響しません。
        
以下に、例をいくつか示します。
mysql>SELECT * FROM table1,table2 WHERE table1.id=table2.id;mysql>SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id;mysql>SELECT * FROM table1 LEFT JOIN table2 USING (id);mysql>SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id->LEFT JOIN table3 ON table2.id=table3.id;mysql>SELECT * FROM table1 USE INDEX (key1,key2)->WHERE key1=1 AND key2=2 AND key3=3;mysql>SELECT * FROM table1 IGNORE INDEX (key3)->WHERE key1=1 AND key2=2 AND key3=3;
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

