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