조인(Join): 여러 테이블을 하나의 테이블처럼/ 등가 조인/ 비등가 조인

2021. 12. 11. 22:34오라클(Oracle) 데이터 베이스

 

 

조인

 

 

  • 두 개 이상의 테이블을 연결하여 하나의 테이블처럼 출력할 때 사용하는 방식
  • 중요한 건 두 개 이상의 테이블을 하나로 연결한 것!
  • 조인 조건을 사용하지 않으면 데카르트 곱(Cartesian product)가 발행하여 반복되는 내용, 정확하지 않은 데이터가 출력됨.
  • 두 테이블을 연결할 때는 WHERE 절에 공통되는 데이터 열을 별칭과 함께 명시해야 함!
FROM	EMP E, DEPT D
WHERE	E.DEPTNO=D.DEPTNO
(FROM에 별칭과 테이블 명/ WHERE에 공통되는 열 DETPNO를 각각 별칭과 함께 명시)

 

 

 

 

 

 


 

 

 

조인 종류


등가 조인 = 내부 조인=단순 조인 1. 테이블을 연결한 후에 출력 행을 각 테이블의 특정 열에 일치한 데이터를 기준으로 선정하는 방법
2. WHERE절에 조건식을 추가로 지정, 출력행을 제한 할 수도 있음
3. WHERE절의 조건식을 사용해 테이블을 조인할 때는 조건식이 최소한 전체 테이블 수보다 하나 적은 수만큼은 있어야 함. 
비등가 조인 1. 등가 조인 외의 조인 방식을 의미
2. A열 BETWEEN B-1열 AND B-2열 같은 구조로 범위 안에 들어가는 데이터 조인에 많이 씀
자체 조인 1. 하나의 테이블을 여러 개의 테이블처럼 활용하는 조인 방식
2. 동일한 테이블 여러 개를 사용할 때 발생할 수 있는 문제점을 해결 
3. FROM 절에 같은 테이블을 여러번 명시하되 테이블 별칭만 다르게 지정하는 방식
외부 조인 1. 조인되는 두 테이블 중에서 어느 한쪽이 NULL값이라도 강제로 출력하는 방식
2. 왼쪽 외부 조인  (WHERE TABLE1.COL1=TABLE2.COL1(+)
3. 오른쪽 외부 조인 (WHERE TABLE1.COM1(+)=TABLE2.COL1

 

 

 

1.  등가 조인 

 

문제) 부서번호(DEPTNO)가 30번인 사원들의 이름(ENAME), 직급(JOB), 부서번호(DEPTNO), 부서위치(LOC)를 출력

SELECT  E.ENAME, E.JOB, E.DEPTNO, D.LOC
FROM    EMP E, DEPT D
WHERE   E.DEPTNO=D.DEPTNO (->부서 위치가 있는 DEPT와 조인해야함 )
AND     E.DEPTNO=30;

 

 

문제2)보너스(COMM)를 받은 사원의 이름(ENAME), 보너스(COMM), 부서명(DNAME), 부서위치(LOC)를 출력

SELECT      E.ENAME, E.COMM, D.DNAME, D.LOC
FROM        DEPT D, EMP E
WHERE       E.DEPTNO=D.DEPTNO
AND         E.COMM>0; (->WHERE조건절 추가)

 

 

문제 3)DALLAS에서 근무하는 사원들의 이름(ENAME), 직급(JOB), 부서번호(DEPTNO), 부서명(DNAME)을 출력

SELECT  E.ENAME, E.JOB, D.DEPTNO, D.DNAME, D.LOC
FROM    EMP E, DEPT D
WHERE   E.DEPTNO=E.DEPTNO
AND     D.LOC='DALLAS';

 

 

 

 

2. 비등가 조인

 

 

문제1) 사원이름(ENAME)과 급여(SAL)와 급여등급(GRADE)을 출력

SELECT E.ENAME, E.SAL, S.GRADE
FROM   EMP E ,SALGRADE S
WHERE  E.SAL BETWEEN S.LOSAL AND S.HISAL; (SALGRADE 범위 내에서 E.SAL의 값을 확인해야 하니)

겨울이냐옹