본문 바로가기
IT/MSSQL

[MSSQL] 셀프조인(self join) 사용법 & 예제

by 베베야 2021. 4. 22.
728x90

조인(join)은 일반적으로 2개의 테이블을 연결해서 사용합니다.

하지만 자기 자신의 테이블을 참조하는 셀프 조인(self join)도 활용이 가능합니다.


이렇게 셀프조인은 명령어가 따로 있는 것이 아니라 

outer join이던 inner join이던 자기 자신의 테이블괴 조인할 경우 self join이라고 생각하시면 되겠습니다.

 

개념은 이정도로 설명하고 emp테이블을 이용해서 셀프 조인을 사용하는 방법에 대해서 알아보겠습니다.

 

테이블 생성 및 데이터 입력

emp 테이블을 생서한 다음 예제에 사용할 데이터를 insert해 주세요.

CREATE TABLE emp
(
EmpId int
,Name varchar(100)
,Direct_Supervisor_Id int
)
INSERT INTO emp values(1,'홍대표','');
INSERT INTO emp values(2,'유과장',1);
INSERT INTO emp values(3,'하대리',2);
INSERT INTO emp values(4,'노대리',2);

--입력된 데이터 확인
SELECT * FROM EMP
---------------------------------------------------------
EmpId   Name    Direct_Supervisor_Id
1       홍대표   0
2       유과장   1
3       하대리   2
4       노대리   2

 

 

셀프 조인 예제

입력된 테이블을 보면 유과장의 직속상관은 홍대표이며, 하대리와 노대리의 직속상관은 유과장입니다.
각 사원들의 직속 상관을 같은 행에 출력하고 싶을 때 셀프 조인을 이용하면 되겠습니다.

 

INNER JOIN

2개의 쿼리 모두다 INNER join이며 문법만 다르지 결과는 동일합니다.
INNER JOIN 사용 시 직속상관이 없는 직원은 출력되지 않습니다.

SELECT A.EMPID, A.NAME AS '직원명',B.NAME AS '직속상관'
FROM EMP A, EMP B
WHERE A.Direct_Supervisor_Id = B.EmpId
---------------------------------------------------------
EMPID 직원명 직속상관
2     유과장 홍대표
3     하대리 유과장
4     노대리 유과장

SELECT A.EMPID, A.NAME AS '직원명',B.NAME AS '직속상관'
FROM EMP A inner join EMP B
On A.Direct_Supervisor_Id = B.EmpId
---------------------------------------------------------
EMPID 직원명 직속상관
2     유과장 홍대표
3     하대리 유과장
4     노대리 유과장

 

LEFT OUTER JOIN 

LEFT OUTER JOIN를 사용하면 직속상관이 없는 홍대표도 출력이 가능합니다.

SELECT A.EMPID, A.NAME AS '직원명',B.NAME AS '직속상관'
FROM EMP A left outer join EMP B
On A.Direct_Supervisor_Id = B.EmpId
---------------------------------------------------------
EMPID 직원명 직속상관
1     홍대표 NULL
2     유과장 홍대표
3     하대리 유과장
4     노대리 유과장


이상으로 셀프조인(self join) 사용법 및 예제 포스팅을 마치겠습니다.

반응형
그리드형

댓글