자체 조인, 외부 조인을 알아야 풀 수 있는 문제
SQL> SELECT D.DEPTNO, D.DNAME, E.EMPNO, E.ENAME, E.MGR, E.SAL, E.DEPTNO,
2 S.LOSAL, S.HISAL, S.GRADE, E2.EMPNO AS MGR_EMPNO, E2.ENAME AS MGR_ENAME
3 FROM EMP E, DEPT D, SALGRADE S, EMP E2
4 WHERE E.DEPTNO(+) = D.DEPTNO
5 AND E.SAL BETWEEN S.LOSAL(+) AND S.HISAL(+)
6 AND E.MGR = E2.EMPNO(+)
7 ORDER BY D.DEPTNO, E.EMPNO;
DEPTNO DNAME EMPNO ENAME MGR SAL DEPTNO LOSAL HISAL GRADE MGR_EMPNO MGR_ENAME
---------- ---------------------------- ---------- -------------------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- --------------------
10 ACCOUNTING 7782 CLARK 7839 2450 10 2001 3000 4 7839 KING
10 ACCOUNTING 7839 KING 5000 10 3001 9999 5
10 ACCOUNTING 7934 MILLER 7782 1300 10 1201 1400 2 7782 CLARK
20 RESEARCH 7369 SMITH 7902 800 20 700 1200 1 7902 FORD
20 RESEARCH 7566 JONES 7839 2975 20 2001 3000 4 7839 KING
20 RESEARCH 7788 SCOTT 7566 3000 20 2001 3000 4 7566 JONES
20 RESEARCH 7876 ADAMS 7788 1100 20 700 1200 1 7788 SCOTT
20 RESEARCH 7902 FORD 7566 3000 20 2001 3000 4 7566 JONES
30 SALES 7499 ALLEN 7698 1600 30 1401 2000 3 7698 BLAKE
30 SALES 7521 WARD 7698 1250 30 1201 1400 2 7698 BLAKE
30 SALES 7654 MARTIN 7698 1250 30 1201 1400 2 7698 BLAKE
30 SALES 7698 BLAKE 7839 2850 30 2001 3000 4 7839 KING
30 SALES 7844 TURNER 7698 1500 30 1401 2000 3 7698 BLAKE
30 SALES 7900 JAMES 7698 950 30 700 1200 1 7698 BLAKE
40 OPERATIONS
50 INSA
1) 내가 처음 작성한 코드
select d.deptno, d.dname, e.empno, e,ename, e.mgr, e.sal, d.deptno as DEPT_1,
s.LOSAL, s.HISAL, s.GRADE, e.mgr as MGR_EMPNO
from emp e, dept d, SALGRADE s
where d.dname = e.empno(+) and e.sal between s.LOSAL and s.HISAL
order by e.empno, d.deptno;
2) 정답 참고하여 자체 조인을 써야한다는 걸 알고 두 번째 작성한 코드
(자체 조인은 수업시간에 배우지 않아 써야한다는 걸 모르고 있었다ㄱ-... 하지만 수업듣기 전에 예습으로 한 번 봤었기 때문에 변명이 되지 않는다. 더 열심히 하자.)
select d.deptno, d.dname, e.empno, e.ename, e.mgr, e.sal, e.deptno as DEPT_1,
s.LOSAL, s.HISAL, s.GRADE, e2.empno as MGR_EMPNO, e2.ename as MGR_ENAME
from emp e, dept d, SALGRADE s, emp e2
where e.deptno(+) = d.deptno and e.sal between s.LOSAL and s.HISAL and e.mgr = e2.empno
order by e.deptno, d.deptno;
=> d.deptno이 먼저 나오고 e.deptno이 나중에 나오기 때문에 외부조인의 특성상 내용이 없는 e.deptno에 (+)를 써주는 것이 맞음. 하지만 여기서 문제점은 e.deptno에만 (+)를 써줬더니 해결이 되진 않음.
나머지 내용이 null값인 d.deptno, d.dname의 데이터가 출력되지 않는다. 외부조인을 이용하여 다시 작성해본다.
3) 세 번째 코드 작성
** ORA-00918: column ambiguously defined 에러주의!! ' . ' ' , ' 주의하기
'Oracle' 카테고리의 다른 글
2022-11-08 1-2 시퀀스, JDBC (0) | 2022.11.08 |
---|---|
2022-11-07 서브쿼리, 뷰, 데이터 조작어, 데이터 정의어, 제약 조건 (0) | 2022.11.08 |
2022-11-04 조인, 서브쿼리 (0) | 2022.11.04 |
2022-11-03 오라클(Oracle) 단일행함수, 다중행함수 (0) | 2022.11.03 |
2022-11-02 오라클(Oracle) SELECT문, WHERE절 (0) | 2022.11.03 |
댓글