簡単にいうと
- 内部結合(Inner Join)の対義語
- 基準となるテーブルにデータがあれば、もう一方のテーブルになくても取り出す
右外部結合と左外部結合の違いは?
基準がどちらになるかの違いがあるだけです。
- 右外部結合は右のテーブルを基準にして結合
- 左外部結合は左のテーブルを基準にして結合
SQL文はどうなっているのか?
SELECT カラム名1, カラム名2, ...,FROM 左に当たるテーブル
LEFT(RIGHT) OUTER JOIN 右に当たるテーブル ON 結合の条件
左とか右がややこしいですが、
- 最初にSELECT文で取ってきたテーブルが左
- JOINのところで取ってるテーブルが右
に該当すると覚えておくといいでしょう。
それでは左(右)外部結合に関して詳しくみていきます。
左外部結合について解説
こんなテーブルがあったとします。
authorsテーブルをbooksテーブルに左外部結合します。
SELECT * FROM books
LEFT OUTER JOIN authors ON books.author_id = authors.id
こう書くと、
- booksテーブルが左
- authorsテーブルが右
- 左を基準にして結合
という意味になります。
左外部結合後のテーブルを見てみると、
- booksテーブルのレコードは全て残っている
- 該当するbookがなかったauthorは削除されている
- 該当するauthorがいなかったbookに結合したレコードは値がnilになる(オレンジ色で色付けしているセル)
ってことがわかると思います。
右外部結合について解説
SELECT * FROM books
RIGHT OUTER JOIN authors ON books.author_id = authors.id
次は右(authorsテーブル)を基準に外部結合していきます。
これは左外部結合が理解できていれば、問題ないですね。
気をつける点は、テーブルのレコードの並びがauthorテーブルを基準にしているところくらいでしょう。