DataBase - 셀프 조인(SELF JOIN)
- 동일 테이블 사이의 조인, FROM절에 동일 테이블이 두번 이상 나타난다.
- 동일 테이블 사이의 조인을 수행하면 테이블과 칼럼 이름이 모두 동일하기 때문에 식별을 위해 반트시 테이블 별칭(ALIAS)를 사용해야 한다.
[예제]
SELECT E1.사원, E1.관리자, E2.관리자 차상위관리자
FROM 사원 E1, 사원 E2
WHERE E1.관리자 = E2.사원
ORDER BY E1.사원;
| 사원 | 관리자 | 차상위관리자 |
|---|---|---|
| B | A | |
| C | A | |
| D | C | A |
| E | C | A |
=>결과에서 A사원(사장)에 대한 정보는 누락되었다.
내부 조인을 사용할 경우 자신의 관리자가 존재하질 경우 누락되기 때문이다. 따라서 이런경우를 방지하기 위해서 아우터 조인을 사용해야 한다.
[예제] : 아우터 조인을 사용해 관리자가 존재하지 않는 데이터 까지 결과에 표시해본다.
SELECT E1.사원, E1.관리자, E2.관리자 차상위관리자
FROM 사원 E1 LEFT OUTER JOIN 사원 E2
ON (E1.관리자 = E2.사원)
ORDER BY E1.사원;
| 사원 | 관리자 | 차상위관리자 |
|---|---|---|
| A | ||
| B | A | |
| C | A | |
| D | C | A |
| E | C | A |
과제 풀이 : 7주차 과제
7-5 : 셀프 조인을 수행하는 SQL문을 한글 질의문과 함께 작성하라. [2점]
한글 질의문 : 사원과 사원의 관리자, 관리자의 관리자(차 상위관리자)를 출력하라.
SQL문
SELECT e1.empno 사원번호, e1.MGR 관리자번호, E2.MGR 차상위관리자번호
FROM EMP E1, EMP E2
WHERE E1.MGR = e2.empno
ORDER BY e1.empno;
7-6 : [과제7-6]에서 만든 질의문을 최상위 레벨도 출력되도록 변경하라. [2점]
SQL문
SELECT e1.empno 사원번호, e1.MGR 관리자번호, E2.MGR 차상위관리자번호
FROM EMP E1 LEFT JOIN EMP E2
ON (E1.MGR = e2.empno)
ORDER BY e1.empno;