結合(JOIN)
昔やったけど、うろ覚えだったので今回きちんと整理してみる。
結合には大きく分けて2種類。内部結合(INNER JOIN)と外部結合(OUTER JOIN)がある。
- 内部結合
- 結合条件に指定したidが両方のテーブルに存在する場合のみ結果セットに含める
- SQL構文はINNER JOIN
例)
select a.user_id, b.to_id, b.mail_body from user_data a INNER JOIN mail_data b on a.user_id=b.from_id;
user_dataとmail_dataを結合させ、送信履歴を取得するSQL。
- 外部結合
- 結合条件に指定したidがどちらかのテーブルに存在しなくても結果セットに含める
- 左側のテーブルを優先するなら左外部結合、右側のテーブルを優先するなら右外部結合
- SQL構文はLEFT (OUTER) JOIN, RIGHT (OUTER) JOIN
例)
select a.user_id, b.to_id, b.mail_body from user_data a LEFT OUTER JOIN mail_data b on a.user_id=b.from_id;
user_dataとmail_dataを結合させ、送信履歴を取得するSQL。
送信したことがないユーザはto_id, mail_body列がNULLになる。