Mintaka's log
[Oracle] 3개 테이블 조인, group by 본문
1.
DEPTNO가 같은 것 중 EMPNO가 큰 데이터만 ENAME, DEPTNO, EMPNO를 출력하고 싶었다.
다만 문제는, GROUP BY에 DEPTNO를 걸게 되면 EMPNO는 MAX로 들어가서 상관없는데 ENAME만 붕 뜬다는 점.
해결방법)
DEPTNO 테이블을 두개 조인해준다.
SQL> SELECT A.ENAME, A.DEPTNO, A.EMPNO
2 FROM EMP A,
3 (SELECT DEPTNO, MAX(EMPNO) AS EMPNO
4 FROM EMP
5 GROUP BY DEPTNO) B
6 WHERE A.EMPNO = B.EMPNO;
---------------------------------------------
ENAME DEPTNO EMPNO
---------- ---------- ----------
HONG2 30 10000
FORD 20 7902
MILLER 10 7934
>이렇게 FROM절에 서브쿼리가 들어가는 걸 인라인 뷰라고 한댄다.
2.
그리고 1의 결과를 DEPT 테이블과 같이 출력하고 싶었다.
DEPT 테이블은 전부 출력되어야 할 것 같아서 LEFT JOIN을 쓰려고 했는데... 일단 그냥 조인을 주었을 땐 다음과 같은 코드로도 원하는 결과를 얻을 수 있었다.
SQL> SELECT A.ENAME, B.DEPTNO, C.DNAME, C.LOC
2 FROM EMP A,
3 (SELECT DEPTNO, MAX(EMPNO) AS EMPNO
4 FROM EMP
5 GROUP BY DEPTNO) B,
6 DEPT C
7 WHERE A.EMPNO = B.EMPNO
8 AND B.DEPTNO = C.DEPTNO;
--------------------------------
ENAME DEPTNO DNAME LOC
---------- ---------- -------------- -------------
HONG2 30 SALES CHICAGO
FORD 20 RESEARCH DALLAS
MILLER 10 ACCOUNTING NEW YORK
3.
하지만 2의 경우 DEPT에 있는 모든 데이터가 출력되지는 않는다....
무작정 LEFT JOIN을 줘보니 결과는 나온다.
SQL> SELECT C.DNAME, C.LOC, B.DEPTNO, B.ENAME
2 FROM DEPT C
3 LEFT JOIN
4 (SELECT A.ENAME, A.DEPTNO, A.EMPNO
5 FROM EMP A,
6 (SELECT DEPTNO, MAX(EMPNO) AS EMPNO
7 FROM EMP
8 GROUP BY DEPTNO) D
9 WHERE A.EMPNO = D.EMPNO) B
10 ON B.DEPTNO = C.DEPTNO;
-----------------------------------------------------------
DNAME LOC DEPTNO ENAME
-------------- ------------- ---------- ----------
SALES CHICAGO 30 HONG2
RESEARCH DALLAS 20 FORD
ACCOUNTING NEW YORK 10 MILLER
회계 부산
영업 서울
QU 노원구
사무 제주
quiz 현재위치
OPERATIONS BOSTON
나중에 봐서 고치든지 해야겠다!
'DB' 카테고리의 다른 글
[Oracle] 자료형 VARCHAR2, CLOB (0) | 2022.05.10 |
---|---|
[Oracle] 계정, 권한부여 (0) | 2022.02.17 |
[Oracle] SEQUENCE, INDEX (0) | 2022.02.16 |
[Oracle]Natural Join (0) | 2022.02.16 |
[Oracle] DML, DDL (0) | 2022.02.15 |