はじめに
みなさん、初めまして。DevToxicClubに所属している@72_mikanです。
普段はJavaエンジニア1年目として自身の無能さを痛感しながら働いております。
今回は、働いていてSQLを良く扱うのですが、働き始める前は簡単なことしかやってこず、外部結合と内部結合で頭が混乱したのでそちらについて自身の学習目的でまとめようかと考えています。(かなりしょぼい内容になります)
結合データ
EMPLOYYテーブル
EMPLOYEE_ID | NAME | POSITION_ID
-------------------------------------------------
1 | TARO | 1
2 | JIRO | 3
3 | SAORO | 4
POSITIONテーブル
POSITION_ID | NAME
-------------------------------------------------
1 | 営業部
2 | 開発部
3 | 経理部
内部結合
内部結合は結合する二つのテーブルで結合条件が一致したレコードのみを結合してくれます。
例えば、上記のテーブルで役所についている社員だけ情報を取り出したいときに使います。
SQL文は以下
SELECT * FROM EMPLOYEE AS emp
INNER JOIN POSITION AS pos
ON emp.POSITION_ID = pos.POSITION_ID
これで、出力される結果が以下
EMPLOYEE_ID | emp.NAME | POSITION_ID |pos.NAME
-------------------------------------------------
1 | TARO | 1 | 営業部
2 | JIRO | 3 | 経理部
左外部結合
左外部結合は内部結合とは異なり、結合条件で一致しないレコードに対しては
SQL文は以下
SELECT * FROM EMPLOYEE AS emp
LEFT OUTER JOIN POSITION AS pos
ON emp.POSITION_ID = pos.POSITION_ID
これで、出力される結果が以下
EMPLOYEE_ID | emp.NAME | POSITION_ID | pos.NAME
-------------------------------------------------
1 | TARO | 1 | 営業部
2 | JIRO | 3 | 経理部
3 | SAORO | 4 | null
右外部結合
SQL文は以下
SELECT * FROM EMPLOYEE AS emp
RIGHT OUTER JOIN POSITION AS pos
ON emp.POSITION_ID = pos.POSITION_ID
これで、出力される結果が以下
POSITION_ID | NAME |
-------------------------------------------------
1 | 営業部 |
2 | 開発部 |
3 | 経理部 |
まとめ
実際、新人が実務でよく使うのは左外部結合、次に内部結合になるかと思います。
そのため、まずは、左外部結合と内部結合の違いを理解しておけばとりあえずは業務では困らないかと思います。
他にも完全会部結合、交差結合があるが現状実務で使ったことがないので今回まとめてません。(そのうちまとめるかも、、、)