728x90
[Oracle] 조인(JOIN) : 등가(EQUAL)조인 / 내부(INNER)조인 (ANSI 조인 / Oracle 조인)
JOIN 두 개 이상의 테이블에서 데이터를 같이 조회하고자 할때 사용하며, 조회 결과는 하나의 결과로 나온다. 무작정 JOIN을 사용해서 조회하는 것이 아니라 테이블 간 연결고리에 해당하는 컬럼
jaynarecord.tistory.com
포괄조인 / 외부조인(OUTER JOIN)\
테이블 간의 JOIN 시 일치하지 않는 행도 포함시켜서 조회 가능
단, 반드시 LEFT / RIGHT 를 지정해야 함(기준이 되는 테이블을 지정)
1) LEFT [OUTER] JOIN
[OUTER] 생략 가능
두 테이블 중 왼편에 기술된 테이블의 데이터는 무조건 조회
Oracle 구문
-- "전체" 사원들의 사원명, 급여, 부서명 조회
-- DEPT_CODE 가 NULL 인 두 명의 사원은 조회 안됨
-- 부서에 배정된 사원이 없는 부서(D3, D4, D7)은 조회 안됨
SELECT EMP_NAME, SALARY, DEPT_TITLE
FROM EMPLOYEE, DEPARTMENT
WHERE DEPT_CODE = DEPT_ID(+);
-- 내가 기준으로 삼을 테이블의 컬럼명 반대쪽에 '(+)'를 붙인다.
ANSI 구문
SELECT EMP_NAME, SALARY, DEPT_TITLE
FROM EMPLOYEE
LEFT OUTER JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID);
-- -> EMPLOYEE 테이블을 기준으로 조회했기 때문에
-- EMPLOYEE에 존재하는 데이터가 뭐든 조회된다.
728x90
2) RIGHT [OUTER] JOIN
두 테이블의 오른편에 기술된 테이블을 기준으로 JOIN
Oracle 구문
SELECT EMP_NAME, SALARY, DEPT_TITLE
FROM EMPLOYEE, DEPARTMENT
WHERE DEPT_CODE(+) = DEPT_ID;
ANSI 구문
SELECT EMP_NAME, SALARY, DEPT_TITLE
FROM EMPLOYEE
RIGHT OUTER JOIN EMPARTMENT ON (DEPT_CODE = DEPT_ID);
3) FULL [OUTER] JOIN
두 테이블이 가진 모든 행을 조회 (Oracle 불가, ANSI에서만 가능)
Oracle 구문
SELECT EMP_NAME, SALARY, DEPT_TITLE
FROM EMPLOYEE, DEPARTMENT
WHERE DEPT_CODE(+) = DEPT_ID(+);
-- => 에러 (only one out-joined table)
ANSI 구문
SELECT EMP_NAME, SALARY, DEPT_TITLE
FROM EMPLOYEE
FULL OUTER JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID);
[Oracle] 조인(JOIN) : 카테시안 곱(CARTESIAN PRODUCT) / 교차(CROSS)조인 / 비등가 조인(NON EQUAL JOIN)
[Oracle] 조인(JOIN) : 포괄조인 / 외부(OUTER) 조인 (ANSI 조인 / Oracle 조인) [Oracle] 조인(JOIN) : 등가(EQUAL)조인 / 내부(INNER)조인 (ANSI 조인 / Oracle 조인) JOIN 두 개 이상의 테이블에서 데이터를 같이 조회하
jaynarecord.tistory.com
728x90