티스토리 뷰

반응형

셀프조인 (self join)

일반적으로 JOIN은 연관된 두 개의 테이블을 연결하기 위해서 사용되지만, 자신의 테이블을 참조하는 셀프조인도 가능합니다.

예제로 사용될 테이블은 사원의 정보를 담고 있는 테이블로 아래와 같습니다.

SELECT * FROM employee;

+----+-----------+-------------+
| id | name      | superior_id |
+----+-----------+-------------+
|  1 | 김사장    |        NULL |
|  2 | 정과장    |           1 |
|  3 | 최대리    |           2 |
|  4 | 이대리    |           2 |
|  5 | 박고문    |        NULL |
+----+-----------+-------------+

사원의 id와 이름 그리고 직속상관(superior)의 id를 나타내고 있습니다.

만약에 사원들의 직속상관의 이름을 보고 싶은 경우에는, 직속상관의 id사원id 이용해서 셀프조인을 시행합니다.

SELECT em1.id,em1.name,em2.name 
FROM employee em1 
JOIN employee em2 
ON em1.superior_id = em2.id;

+----+-----------+-----------+
| id | name      | name      |
+----+-----------+-----------+
|  2 | 정과장    | 김사장    |
|  3 | 최대리    | 정과장    |
|  4 | 이대리    | 정과장    |
+----+-----------+-----------+


LEFT JOIN을 이용하면 직속상관이 없는 사원들도 같이 출력 가능합니다.

SELECT em1.id,em1.name,em2.name 
FROM employee em1 
LEFT JOIN employee em2 
ON em1.superior_id = em2.id;

+----+-----------+-----------+
| id | name      | name      |
+----+-----------+-----------+
|  1 | 김사장    | NULL      |
|  2 | 정과장    | 김사장    |
|  3 | 최대리    | 정과장    |
|  4 | 이대리    | 정과장    |
|  5 | 박고문    | NULL      |
+----+-----------+-----------+


반응형
댓글