-
Oracle - JOIN데이터베이스/Oracle 2020. 11. 12. 14:47728x90반응형
JOIN
JOIN이란 하나 이상의 테이블에서 데이터를 조회하기 위해 사용하고 수행 결과는 하나의 Result Set으로 나타낸다.
JOIN에는 오라클 전용 구문과 ANSI 표준 구문이 있다.
예를들어
EMPLOYEE 테이블 조회
SELECT EMP_ID, EMP_NAME, DEPT_CODE FROM EMPLOYEE;
DEPARTMENT 테이블 조회
SELECT DEPT_ID, DEPT_TITLE FROM DEPARTMENT;
EMPLOYEE 테이블과 DEPARTMENT 테이블을 JOIN을 하면
SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE FROM EMPLOYEE, DEPARTMENT -- 합치게될 테이블 명시 WHERE DEPT_CODE = DEPT_ID; -- 합치게될 컬럼명 명시
왼쪽 EMPLOYEE 테이블의 DEPT_CODE가 오른쪽 DEPARTMENT 테이블의 DEPT_ID의 매칭되어
DEPT_TITLE을 옆에 합쳐 조회한다.
이제 JOIN을 오라클 전용 구문과 ANSI 구문을 사용하여 합쳐보자.
오라클 전용 구문
오라클 전용구문이란 FROM절에 ‘,’로 구분하여 합치게 될 테이블 명을 기술하고
WHERE절에 합치기에 사용할 컬럼명을 명시한다.
[ 오라클 전용 구문 예시 ]
SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE FROM EMPLOYEE, DEPARTMENT WHERE DEPT_CODE = DEPT_ID;
- 연결에 사용할 두 컬럼 명이 다른 경우 그 자체로 사용 가능하다.
테이블 명.컬럼 명으로 작성하여 구분하는 예시
SELECT EMP_ID, EMP_NAME, EMPLOYEE.JOB_CODE, JOB_NAME FROM EMPLOYEE, JOB WHERE EMPLOYEE.JOB_CODE = JOB.JOB_CODE; -- 테이블명.컬럼명
FROM절에 사용한 테이블 별칭을 이용하는 구문 예시
SELECT EMP_ID, EMP_NAME, E.JOB_CODE, JOB_NAME FROM EMPLOYEE E, JOB J -- 별칭사용 WHERE E.JOB_CODE = J.JOB_CODE;
둘 SQL문이 같은 결과를 나타낸다.
ANSI 표준 구문
ANSI 표준 구문이란 연결에 사용하려는 컬럼 명이 같은 경우 USING() 사용하고
다른 경우 ON() 사용한다.
[ ANSI 표준 구문 예시 ]
USING을 사용하는 예시
SELECT EMP_ID, EMP_NAME, JOB_CODE, JOB_NAME FROM EMPLOYEE JOIN JOB USING(JOB_CODE); -- USING을 사용한다.
ON을 사용하는 예시
SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE FROM EMPLOYEE JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID);
INNER JOIN과 OUTER JOIN
ININER JOIN과 OUTER JOIN 이란 기본적으로 JOIN은 INNER JOIN이며 두 개 이상의 테이블을 조인할 때 일치하는 값이 없는 행은 조인에서 제외된다.
OUTER JOIN은 일치하지 않은 값도 포함이 되며 반드시 OUTER JOIN을 명시해야한다.
INNER JOIN
INNER JOIN은 내부조인 혹은 등가조인이라고 불린다.
연결된 컬럼의 값이 일치하는 행들만 조인이 이루어지고 컬럼값이 일치하지 않는 행은 조인에서 제외된다.
마치 교집합처럼 이루어져 있다.
[ INNER JOIN 예시 ]
SELECT EMP_NAME, DEPT_TITLE FROM EMPLOYEE JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID);
OUTER JOIN
OUTER JOIN이란 외부조인 혹은 포괄조인이라고 불린다.
두테이블의 지정한 컬럼값이 일치하지 않는 행도 조인에 포함 시킨다.
OUTER JOIN 에는 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN세가지가 있다.
LEFT OUTER JOIN
LEFT OUTER JOIN이란 두 테이블 중 왼쪽에 기술된 테이블의 컬럼 수를 기준으로 JOIN할 때 사용한다.
또한 NULL값을 제외하지 않는다. 즉, NULL값을 포함한다.
LEFT OUTER JOIN은 이러한 모양으로 이루어져있다.
[ LEFT JOIN 예시 ]
ANSI 표준 구문 예시
SELECT EMP_NAME, DEPT_TITLE FROM EMPLOYEE LEFT JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID);
오라클 전용 구문 예시
SELECT EMP_NAME, DEPT_TITLE FROM EMPLOYEE, DEPARTMENT WHERE DEPT_CODE = DEPT_ID(+); -- 왼쪽(DEPT_CODE)를 기준으로 하여 오른쪽(DEPT_ID)를 맞춰서 추가
RIGHT OUTER JOIN
RIGHT OUTER JOIN이란 두 테이블 중 오른쪽에 기술된 테이블의 컬럼 수를 기준으로 JOIN할 때 사용한다.
또한 NULL값을 제외하지 않는다. 즉, NULL값을 포함한다.
RIGHT OUTER JOIN 이러한 모양으로 이루어져있다.
[ RIGHT OUTER JOIN 예시 ]
ANSI 표준 구문 예시
SELECT EMP_NAME, DEPT_TITLE FROM EMPLOYEE RIGHT JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID);
오라클 표준 구문 예시
SELECT EMP_NAME, DEPT_TITLE FROM EMPLOYEE, DEPARTMENT WHERE DEPT_CODE(+) = DEPT_ID;
FULL OUTER JOIN
FULL OUTER JOIN이란 두 테이블이 가진 모든 행을 결과에 포함시킬 때 사용한다.
LEFTOUTER JOIN 와 RIGHTOUTERJOIN 를 합친것이다.
오라클 전용 구문에서는 FULL OUTER JOIN이 안된다.
FULL OUTER JOIN 이러한 모양으로 이루어져있다.
[ FULL OUTER JOIN 예시 ]
SELECT EMP_NAME, DEPT_TITLE FROM EMPLOYEE FULL /*OUTER*/ JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID); -- OUTER는 생략이 가능!
728x90반응형'데이터베이스 > Oracle' 카테고리의 다른 글
Oracle - 서브쿼리(SUBQUERY) - Part 1 (0) 2020.11.16 Oracle - CROSS JOIN / NON_EQUI JOIN / SELF JOIN (0) 2020.11.13 Oracle - GROUP BY 의 ROLLUP과 CUBE (0) 2020.11.11 Oracle - ORDER BY / GROUP BY / HAVING (0) 2020.11.11 Oracle 함수(Function) - 그룹 함수 (0) 2020.11.11