Programming/SQL

[Oracle] 조인(JOIN) : 포괄조인 / 외부(OUTER) 조인 (ANSI 조인 / Oracle 조인)

Jayna. 2024. 2. 13. 16:12
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