본문 바로가기

프로그래밍/오라클

[ORACLE] JOIN _ INNER JOIN _ 오라클 조인

[ORACLE] JOIN _ INNER JOIN _ 오라클 조인



Join의 정석  |  1. Join 선택기준
                    2. On 과 Where 어디 조건을 줄 것인가?
                    
3. Join결과에서 Group By 사용법
                    4. 공통된 컬럼이 없는 경우 Join이 사용 가능한가? 
                        가능하다면 그 기준은 어떻게 되는가?
                    5. Outer Join시 (Left, Right, Full Join)의 기준은?
                    6. 카타시안 곱은 도대체 뭐냐?



위 6가지 궁금증을 하나씩 풀어보자!


1. 조인의 선택기준에 대해살펴보자.
Join은 두 테이블간에 공통된 컬럼(조건)으로 (두 테이블을 Row기준으로) 합쳐서 표현하는 것이다. 
Join에는 크게 Inner Join, Outer Join이 있다. 그럼 둘 중에 무엇을 선택해서 쓸 것인가? 다음은 테이블에 대한 설명이다. 



부서테이블


사원테이블



2. INNER JOIN

위에 있는 두 테이블을 DEPTNO(부서번호) 컬럼을 기준으로 INNER JOIN 해보자. 단순하다. 부서번호가 같은 것 끼리 데이터를 합치는 것이다. 그럼, DEPTNO를 조건으로 INNER JOIN을 한 결과를 유추해봅시다. (단, 조건은 왼쪽에 놓인 EMP테이블이 MOTHER 테이블_기준 테이블이다.) 



2.1. 테이블 분석

EMP    |

각 사원이 어떤 부서에 속해있는지를 나타내는 테이블이다. 7369사원은 20번 부서에 속했다는 정보를 알 수 있다.


DEPT    | 

각 부서의 이름은 무엇이고, 어느 지역에 속했는지를 나타내는 부서 정보 테이블이다.


2.2. 테이블 INNER JOIN 유추

테이블 분석결과에 따라 유추해보면 다음과 같은 결론에 도달 할 수 있다. 사원이 속한 부서는 무엇이고 각 부서의 정보들을 한번에 볼 수 있는 테이블이 완성되게 된다. 






2.3. 테이블 INNER JOIN 결과



위와 같은 테이블이 만들어지게 됩니다. 사원이 속한 부서는 어떤 부서인지에 대한 정보가 담긴 테이블이 완성되는 것이지요. 이 테이블을 통해서는 사원별 부서정보 테이블이라 명명할 수도 있겠습니다. INNER JOIN은 딱 매칭되는 데이터의 값이 일치하는 것들만 가져와서 보여준다. 따라서 40번 부서의 소속인 사원이 없기에 해당 부서의 정보는 나타나지 않음을 확인 할 수 있습니다. 그럼 이제 해당 테이블을 실제로 만들어낸 쿼리를 살펴볼까요. 


SELECT A.EMPNO
        , A.DEPTNO
        , B.DNAME
        , B.LOC
  FROM EMP A
 INNER 
  JOIN DEPT B
    ON A.DEPTNO = B.DEPTNO

 



INNER JOIN을 살펴보았습니다. 위와 같이 공통된 컬럼(조건)이 있는 경우에 INNER JOIN을 사용하면 된다. 컬럼명이 같아야한다는 뜻이 아니다. 비교할 컬럼의 데이터가 매칭이 되는 데이터여야 한다는 뜻이다. INNER JOIN은 딱 매칭되는 데이터의 값이 일치하는 것들만 가져와서 보여준다. 따라서 


그렇다면, 매칭되는 데이터의 결과가 일치하지 않거나, 컬럼에 값이 빈 경우임에도 비어있는 그대로 나타내고 싶을 경우 OUTER JOIN을 씁니다. OUTER JOIN은 다음에 더 자세하게 살펴보겠습니다. 그럼 오늘도 공부합시다!!