テーブルの結合について、自分なりにまとめてみた。
まずは、内部結合編からお送りいたします。
概要 |
JOINで結合先のテーブルを指定し、ONより後ろに、どの条件で結合するのかを記述する。
結合した両テーブルの中から、結合条件(ON)に一致するデータのみを抽出する(どちらか片方のテーブル、または両方のテーブルとも条件に一致しない場合は抽出しない)
SELECT * FROM 結合元のテーブル名(左) INNER JOIN 結合先のテーブル名(右) ON 両テーブルの結合条件 |
例示 |
◆結合元テーブル:子供テーブル(Kodomo)
◆結合先テーブル:親テーブル(Oya)
◆結合条件:子供テーブルの「oya_id」 と 親テーブルの「id」 が一致するデータ
子供テーブル(結合元):Kodomo
id | name | oya_id |
1 | ichiro | 1 |
2 | jiro | 2 |
3 | saburo | 1 |
4 | shiro | 4 |
親テーブル(結合先):Oya
id | name |
1 | taro |
2 | hanako |
3 | gonzou |
(SQL)
SELECT * FROM Kodomo –結合元テーブル INNER JOIN Oya –結合先テーブル ON Kodomo.oya_id = Oya.id; –結合条件1(※この後にANDで複数条件も可能) |
(結果)子供テーブルのoya_id=4 と 親テーブルのid=3 は
結合条件に一致しない(子供テーブル.oya_idと親テーブル.idが一致するものが無い)ためSELECTされない。
id | name | oya_id | id | name |
1 | ichiro | 1 | 1 | taro |
3 | saburo | 1 | 1 | taro |
2 | jiro | 2 | 2 | hanako |
まとめ・・・ |
1.左(結合元_子供)Kodomoテーブルの一覧を取得する
2.右(結合先_親)Oyaテーブルから、ONで指定した条件にマッチするレコードを探してマージする。
3.マッチするレコードが複数あった場合、1,2レコード目のように、マージしたものをそれぞれ別のレコードにする。
4.条件にマッチするレコードがないものは削除される。