Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

Mintaka's log

[Oracle] 3개 테이블 조인, group by 본문

DB

[Oracle] 3개 테이블 조인, group by

_해랑 2022. 5. 22. 00:58

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