[Oracle] JOIN

chael_lo·2021년 6월 30일
0

Oracle

목록 보기
14/17

JOIN

두 개이상의 테이블에서 원하는 컬럼값을 검색하기 위한 기능이다.

JOIN 특징

  • 두개 이상의 테이블에서 컬럼값을 검색하기 위해서는 반드시 JOIN조건을 명시하여 검색해야 한다.
  • 조인 테이블에 동일한 이름의 컬럼이 존재할 경우 테이블명을 명시하여 컬럼을 명확하게 구분해야 한다.
    예시) 테이블명.컬럼명
  • 카타시안 프로덕트(CATASIAN PRODUCT)
    두 개 이상의 테이블을 조인할 때(테이블의 모든 행을 조인) 조인조건을 명시하지 않은 경우 발생한다.
  • 조인 테이블에 동일한 이름의 컬럼명을 같이 검색할 경우 첫번째 컬럼을 제외한 나머지 컬럼명은 자동으로 변경되어 검색된다.

동등조인(EQUI JOIN)

조인조건에 = 연산자를 사용하여 결과가 참인 행만 검색한다.
조인조건을 WHERE 구문의 조건식으로 표현하여 사용한다.

SELECT EMPNO,ENAME,SAL,DNAME,LOC FROM EMP,DEPT
WHERE EMP.DEPTNO=DEPT.DEPTNO;

비동등 조인(NON-EQUI JOIN)

조인조건에 = 연산자를 제외한 연산자를 사용하여 결과가 참인 행만 검색한다.

--조인조건 : 사원의 급여가 최소급여부터 최대급여 범위에 포함될 경우에 급여등록 검색 
SELECT EMPNO,ENAME,SAL,GRADE FROM EMP,SALGRADE
WHERE SAL BETWEEN LOSAL AND HISAL;

외부조인(OUTER JOIN)

교차조인된 검색결과에서 조건조건이 참인 행만 검색하는 것이 아니라 조인조건에 누락된 행도 검색한다.
조인조건의 테이블에 (+)를 사용하여 조인조건에 누락된 행의 컬럼값을 NULL로 검색되도록 설정한다.

--EMP 테이블과 DEPT 테이블에서
--모든 사원의 사원번호,사원이름,급여,부서이름,부서위치 검색하기
--조인조건: EMP 테이블의 부서번호와 DEPT 테이블의 부서번호가 같은 행을 결합되어 검색하고
--사원이 근무하지 않는 부서도 검색 
--사원이 없는 부서를 검색해야 되는 경우 (+)를 사용하여 NULL이 검색되도록 설정함
SELECT EMPNO,ENAME,SAL,DNAME,LOC FROM EMP,DEPT
WHERE EMP.DEPTNO(+)=DEPT.DEPTNO;

셀프조인(SELF JOIN)

하나의 테이블에 다른 여러 개의 별칭을 설정하여 조인하는 기능이다.

SELECT WORKER.EMPNO,WORKER.ENAME WORKER_ENAME,WORKER.MGR,
MANAGER.ENAME MANAGER_ENAME 
FROM EMP WORKER,EMP MANAGER 
WHERE WORKER.MGR=MANAGER.EMPNO(+);

교차조인(CROSS JOIN)

조인 테이블의 모든 행을 교차조인하기 위한 조인이다.
조인조건을 명시하지 않고 조인한다.

형식)
SELECT 검색대상,... FROM 테이블명1 CROSS JOIN 테이블명2

SELECT EMPNO,ENAME,SAL,DNAME,LOC FROM EMP CROSS JOIN DEPT;

NATURAL JOIN

조인 테이블에 같은 이름의 컬럼이 하나만 있는 경우 같은 이름의 컬럼값을 비교하며 조인조건을 명시하지 않고 조인한다.

형식)
SELECT 검색대상,... FROM 테이블명1 NATURAL JOIN 테이블명2

같은 이름의 컬럼은 테이블명을 명시하지 않아도 사용 가능

SELECT EMPNO,ENAME,SAL,DEPTNO,DNAME,LOC FROM EMP NATURAL JOIN DEPT;

JOIN USING

조인 테이블에 같은 이름의 컬럼이 여러 개 있는 경우 사용하며, 조인조건을 명시하지 않고 조인한다.

형식)
SELECT 검색대상,... FROM 테이블명1 JOIN 테이블명2 USING(컬럼명)

--USING 구문에서 명시된 컬럼명은 테이블명을 명시하지 않아도 사용 가능 
SELECT EMPNO,ENAME,SAL,DEPTNO,DNAME,LOC FROM EMP
JOIN DEPT USING(DEPTNO);

INNER JOIN

조인조건을 명시하여 조인조건이 맞는 경우 결합하여 검색하는 조인

형식)
SELECT 검색대상,... FROM 테이블명1 [INNER] JOIN 테이블명2 ON 조인조건

--조인 테이블에 같은 이름의 칼럼이 존재할 경우 테이블명을 반드시 명시하여 검색
SELECT EMPNO,ENAME,SAL,DNAME,LOC FROM EMP
INNER JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO;
--INNER 생략가능
SELECT EMPNO,ENAME,SAL,DNAME,LOC FROM EMP
JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO;

OUTER JOIN

조인조건을 명시하여 조인조건이 맞는 행과 조인조건이 맞지 않아 누락된 행도 결합하여 검색하는 조인

형식)
SELECT 검색대상,... FROM 테이블명1 {LEFT|RIGHT|FULL} [OUTER] 
JOIN 테이블명2 ON 조인조건

LEFT OUTER JOIN

왼쪽 방향에 선언된 테이블의 모든 행을 검색하되 오른쪽방향의 선언된 테이블은 조인조건이 참인 행과 결합하여 검색하고 조인조건에 참인 행이 없는 경우 NULL로 결합하여 검색한다.

SELECT EMPNO,ENAME,SAL,DNAME,LOC FROM EMP
LEFT JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO;

RIGHT OUTER JOIN

오른쪽 방향에 선언된 테이블의 모든 행을 검색하되 왼쪽 방향의 선언된 테이블은 조인조건이 참인 행과 결합하여 검색하고 조인조건에 참인 행이 없는 경우 NULL로 결합하여 검색한다.

SELECT EMPNO,ENAME,SAL,DNAME,LOC FROM EMP
RIGHT JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO;

FULL OUTER JOIN

양쪽 방향에 선언된 테이블의 모든 행을 검색하되 조인조건이 참인 행은 결합하여 검색하고 조인조건이 참인 행이 없는 경우 NULL로 결합하여 검색한다.

SELECT EMPNO,ENAME,SAL,DNAME,LOC FROM EMP
FULL JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO;

테이블 별칭(TABLE ALIAS)

테이블에 새로운 이름을 일시적으로 부여하는 기능이다.
테이블명을 간단하게 표현하기 위해 사용하거나 같은 테이블을 여러 개의 테이블로 표현하기 위해 사용한다.
테이블 별칭을 설정한 경우 별칭 대신 테이블명을 사용하면 에러가 발생한다.

형식)
SELECT 검색대상,... FROM 테이블명 별칭,...

--EMP 테이블을 E,
--DEPT 테이블을 D로 별칭을 붙여 사용
SELECT EMPNO,ENAME,SAL,E.DEPTNO EMP_DEPTNO,D.DEPTNO DEPT_DEPTNO,DNAME,LOC 
FROM EMP E,DEPT D WHERE E.DEPTNO=D.DEPTNO;
profile
천천히 꾸준히

0개의 댓글