SELF JOIN
셀프 조인이란 자신 테이블 안에서 데이터가 서로 포함 관계를 가지는 경우에 사용한다
JOIN은 서로 다른 테이블을 합치는 것이지만 SELF조인은 자신과 자신을 합쳐 사용합니다.
왜 자신을 합쳐서 사용하게 될까요?
예를 들면 회사에 회사원들이 있고 회사원들 또한 직급이 존재합니다
팀장의 부서원들로 팀원들이 존재하며 팀원을 은 부서장인 팀장이 필요해
서로서로 데이터를 참조해야 할 경우 사용할 수 있습니다.
즉 테이블 안에서 데이터의 관계를 풀어낼 때 사용합니다.
MEMBER TABLE
이름 |
ID |
사원번호 |
부서장_ID |
홍길동 |
DEP_3 |
123 |
DEP_1 |
유재석 |
DEP_2 |
124 |
DEP_1 |
김두한 |
DEP_4 |
125 |
DEP_2 |
손오공 |
DEP_1 |
126 |
NULL |
억지스럽지만 회사원들의 테이블에서 부서장의 이름을 같이 조회하고 싶다고 한다면 자신 테이블을 참조할 수 있습니다.
먼저 암시적인 JOIN을 해보게 된다면 관계가 없는 회사원들은 빠지게 될 것입니다.
SELECT M.* , B.NAME 부서장_NAME
FROM MEMBER M JOIN MEMBER B
ON M.ID = B. 부서장_ID;
이름 |
ID |
사원번호 |
부서장_ID |
부서장_NAME |
홍길동 |
DEP_3 |
123 |
DEP_1 |
손오공 |
유재석 |
DEP_2 |
124 |
DEP_1 |
손오공 |
김두한 |
DEP_4 |
125 |
DEP_2 |
유재석 |
|
주인공은 MEMBER의 모든 회사원을 가져오되 부서장이 없는 경우도 NULL값으로 출력을 해야 더 보기 좋을 것 같습니다.
SELECT M.* , B.NAME 부서장_NAME
FROM MEMBER M LEFT OUTER JOIN MEMBER B
ON M.ID = B. 부서장_ID;
이름 |
ID |
사원번호 |
부서장_ID |
부서장_NAME |
홍길동 |
DEP_3 |
123 |
DEP_1 |
손오공 |
유재석 |
DEP_2 |
124 |
DEP_1 |
손오공 |
김두한 |
DEP_4 |
125 |
DEP_2 |
유재석 |
손오공 |
DEP_1 |
126 |
NULL |
NULL |
만약 우리가 댓글에 다시 댓글이 달렸을 때 카테고리가 카테고리를 참조할 때 사용되기도 합니다.
'Database > Oracle' 카테고리의 다른 글
ORACLE SQL 숫자함수 (0) | 2020.04.16 |
---|---|
ORACLE SQL 문자열 내장 함수 (2) (0) | 2020.04.15 |
ORACLE SQL 문자열 내장 함수 (1) (0) | 2020.04.15 |
ORACLE SQL JOIN (0) | 2020.04.14 |
Oracle SQL 정규표현 (0) | 2020.04.13 |
댓글