内部結合と外部結合
内部結合と外部結合について。
例は以下のテーブルに対してSQLを発行した結果です。
mysql> select * from kittens; +----+-------+---------+ | id | name | type_id | +----+-------+---------+ | 1 | mii | 1 | | 2 | tora | 2 | | 3 | shiro | 1 | | 4 | kuro | 4 | +----+-------+---------+ 4 rows in set (0.02 sec) mysql> select * from types; +----+---------------+ | id | name | +----+---------------+ | 1 | mike | | 2 | scottish-fold | | 3 | egyptian mau | +----+---------------+ 3 rows in set (0.01 sec)
内部結合(INNER JOIN)
- 左(kittens)のテーブルの一覧を取得し、
- 右(types)テーブルから、ONで指定した条件にマッチするレコードを探してマージします。
- マッチするレコードが複数あった場合、マージしたものをそれぞれ別のレコードにします。
- 左(kittens)のテーブル一覧のうち、条件にマッチするレコードがないものは削除されます。
例:
mysql> select * from kittens join types on kittens.type_id = types.id; +----+-------+---------+----+---------------+ | id | name | type_id | id | name | +----+-------+---------+----+---------------+ | 1 | mii | 1 | 1 | mike | | 3 | shiro | 1 | 1 | mike | | 2 | tora | 2 | 2 | scottish-fold | +----+-------+---------+----+---------------+ 3 rows in set (0.01 sec)
外部結合(LEFT OUTER JOIN)
- 左(kittens)のテーブルの一覧を取得し、
- 右(types)テーブルから、ONで指定した条件にマッチするレコードを探してマージします。
- マッチするレコードが複数あった場合、マージしたものをそれぞれ別のレコードにします。
- 左(kittens)のテーブルの一覧のうち、条件にマッチするレコードがないものの値はNULLになります。レコードは削除されません。
例:
mysql> select * from kittens left join types on kittens.type_id = types.id; +----+-------+---------+------+---------------+ | id | name | type_id | id | name | +----+-------+---------+------+---------------+ | 1 | mii | 1 | 1 | mike | | 2 | tora | 2 | 2 | scottish-fold | | 3 | shiro | 1 | 1 | mike | | 4 | kuro | 4 | NULL | NULL | +----+-------+---------+------+---------------+ 4 rows in set (0.01 sec)
外部結合(RIGHT OUTER JOIN)
右側のテーブルを軸にして外部結合します。
- 右(types)のテーブルの一覧を取得し、
- 左(kittens)テーブルから、ONで指定した条件にマッチするレコードを探してマージします。
- マッチするレコードが複数あった場合、マージしたものをそれぞれ別のレコードにします。
- 右(types)のテーブルの一覧のうち、条件にマッチするレコードがないものの値はNULLになります。レコードは削除されません。
例:
mysql> select * from kittens right join types on kittens.type_id = types.id; +------+-------+---------+----+---------------+ | id | name | type_id | id | name | +------+-------+---------+----+---------------+ | 1 | mii | 1 | 1 | mike | | 3 | shiro | 1 | 1 | mike | | 2 | tora | 2 | 2 | scottish-fold | | NULL | NULL | NULL | 3 | egyptian mau | +------+-------+---------+----+---------------+