内部結合(ON で条件指定)
SELECT * FROM テーブル1 INNER JOIN テーブル2 ON 結合条件
MySQL では内部結合がサポートされています。
内部結合とは、複数のテーブル間で同一の条件を満たすレコードのみを抽出して表示する方法です。
例えば、以下のような2つのテーブルがあったとします。
mysql> SELECT * FROM list_a; +------------+---------+ | NAME | TYPE_ID | +------------+---------+ | MySQL | 1 | | Perl | 2 | | Oracle | 1 | | PHP | 2 | | C言語 | 3 | | PostgreSQL | 1 | | Java | 3 | | Ruby | 2 | +------------+---------+ 8 rows in set (0.01 sec) mysql> SELECT * FROM list_b; +---------+--------------------+ | TYPE_ID | TYPE | +---------+--------------------+ | 1 | データベース | | 2 | インタプリタ型言語 | | 3 | コンパイラ型言語 | +---------+--------------------+ 3 rows in set (0.00 sec)
この list_a というテーブルに list_b というテーブルを TYPE_ID 列を結合条件として内部結合してみます。
mysql> SELECT * FROM list_a INNER JOIN list_b -> ON list_a.TYPE_ID = list_b.TYPE_ID; +------------+---------+---------+--------------------+ | NAME | TYPE_ID | TYPE_ID | TYPE | +------------+---------+---------+--------------------+ | MySQL | 1 | 1 | データベース | | Oracle | 1 | 1 | データベース | | PostgreSQL | 1 | 1 | データベース | | Perl | 2 | 2 | インタプリタ型言語 | | PHP | 2 | 2 | インタプリタ型言語 | | Ruby | 2 | 2 | インタプリタ型言語 | | C言語 | 3 | 3 | コンパイラ型言語 | | Java | 3 | 3 | コンパイラ型言語 | +------------+---------+---------+--------------------+ 8 rows in set (0.00 sec)
結合条件に使用した列を表示しないようにすればより見やすくなります。
mysql> SELECT NAME, TYPE FROM list_a INNER JOIN list_b -> ON list_a.TYPE_ID = list_b.TYPE_ID; +------------+--------------------+ | NAME | TYPE | +------------+--------------------+ | MySQL | データベース | | Oracle | データベース | | PostgreSQL | データベース | | Perl | インタプリタ型言語 | | PHP | インタプリタ型言語 | | Ruby | インタプリタ型言語 | | C言語 | コンパイラ型言語 | | Java | コンパイラ型言語 | +------------+--------------------+ 8 rows in set (0.03 sec)