MySQL INNER_JOIN と OUTER_JOIN
Sponsored Links
皆さんこんにちは
お元気ですか。私は実家に帰っております。
本日はMySQLでJOINを行います。JOINとはテーブルを結合する操作ですが、結合方法には様々な形式がございます。
今回2つのテーブルを用意しました。customerテーブルとcountryテーブルです。
mysql> SELECT * FROM customer; +----+---------------+------------+ | id | name | country_id | +----+---------------+------------+ | 1 | yamada taro | 1 | | 2 | yamada hanako | 2 | | 3 | yamada jiro | 2 | | 4 | yamada saburo | 4 | | 5 | yamada shiro | NULL | +----+---------------+------------+ mysql> SELECT * FROM country; +------------+---------------+ | country_id | country_name | +------------+---------------+ | 1 | Japan | | 2 | China | | 3 | United States | | 4 | India | +------------+---------------+
内部結合
どちらにも存在するレコードを取得します。
記載方法の一般化ですが、SELECT * FROM [table名] INNER JOIN [結合したいtable名] ON [条件]
mysql> SELECT * FROM customer INNER JOIN country ON customer.country_id = country.country_id; +----+---------------+------------+------------+--------------+ | id | name | country_id | country_id | country_name | +----+---------------+------------+------------+--------------+ | 1 | yamada taro | 1 | 1 | Japan | | 2 | yamada hanako | 2 | 2 | China | | 3 | yamada jiro | 2 | 2 | China | | 4 | yamada saburo | 4 | 4 | India | +----+---------------+------------+------------+--------------+
右外部結合
中心に結合します。
右側にあるものは全て左に結合し、ないものについてはNULLと結合します。
一般化:SELECT * FROM [table名] RIGHT OUTER JOIN [結合したいtable名] ON [条件]
mysql> SELECT * FROM customer RIGHT OUTER JOIN country ON customer.country_id = country.country_id; +------+---------------+------------+------------+---------------+ | id | name | country_id | country_id | country_name | +------+---------------+------------+------------+---------------+ | 1 | yamada taro | 1 | 1 | Japan | | 2 | yamada hanako | 2 | 2 | China | | 3 | yamada jiro | 2 | 2 | China | | 4 | yamada saburo | 4 | 4 | India | | NULL | NULL | NULL | 3 | United States | +------+---------------+------------+------------+---------------+ 5 rows in set (0.00 sec)
左外部結合
先程とは逆に左側に記載したテーブルを基準に結合する。
一般化:SELECT * FROM [table名] LEFT OUTER JOIN [結合したいtable名] ON [条件]
mysql> SELECT * FROM customer LEFT OUTER JOIN country ON customer.country_id = country.country_id; +----+---------------+------------+------------+--------------+ | id | name | country_id | country_id | country_name | +----+---------------+------------+------------+--------------+ | 1 | yamada taro | 1 | 1 | Japan | | 2 | yamada hanako | 2 | 2 | China | | 3 | yamada jiro | 2 | 2 | China | | 4 | yamada saburo | 4 | 4 | India | | 5 | yamada shiro | NULL | NULL | NULL | +----+---------------+------------+------------+--------------+ 4 rows in set (0.00 sec)