티스토리 뷰
반응형
셀프조인 (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 |
+----+-----------+-----------+
반응형
'Database' 카테고리의 다른 글
엘라스틱 서치는 왜 그렇게 빠를까? (5) | 2019.04.11 |
---|---|
SQL vs NoSQL (MySQL vs. MongoDB) (56) | 2019.03.20 |
다대다(M:N) 관계 연결테이블로 구현하기 (23) | 2018.11.14 |
StarUML로 데이터 정의 언어(DDL) 자동 생성하기 (0) | 2018.10.28 |
StarUML로 간단한 Database ERD(Data Model)그리기 (0) | 2018.10.27 |
댓글