Programming/SQL

[Oracle] 조인(JOIN) : 등가(EQUAL)조인 / 내부(INNER)조인 (ANSI 조인 / Oracle 조인)

Jayna. 2024. 2. 13. 16:10
728x90

JOIN

두 개 이상의 테이블에서 데이터를 같이 조회하고자 할때 사용하며,

조회 결과는 하나의 결과로 나온다.

무작정 JOIN을 사용해서 조회하는 것이 아니라 테이블 간 연결고리에 해당하는 컬럼을 매칭시켜야 한다.

 

Oracle 전용 구문 ANSI (Oracle + 다른 DBMS) 구문
등가조인(EQUAL JOIN) 내부조인(INNER JOIN) -> JOIN USING / ON
외부조인(OUTER JOIN) -> JOIN USING
포괄조인(LEFT/RIGHT OUTER) 왼쪽 외부조인(LEFT OUTER JOIN)
오른쪽 외부조인(RIGHT OUTER JOIN)
전체 외부조인(FULL OUTER JOIN) => Oracle에서는 불가
카테시안 곱(CARTESIAN PRODUCT) 교차조인(CROSS JOIN)
자체조인(SELF JOIN)
비등가조인(NON EQUAL JOIN)
JOIN ON

 

728x90

등가조인(EQUAL JOIN) / 내부조인(INNER JOIN)

연결시키는 컬럼의 값이 일치하는 행들만 JOIN 돼서 조회( == 일치하지 않는 값들은 조회에서 제외)

 

Oracle 전용 구문

FROM절에 조회하고자하는 테이블들을 나열(,)

WHERE절에 매칭시킬 컬럼명(연결고리)에 대한 조건을 제시함

  1) 연결할 두 컬럼명이 다른 경우

-- 전체 사원들의 사번, 사원명, 부서코드, 부서명 같이 조회
-- EMPLOYEE - "DEPT_CODE" / DEPARTMENT - "DEPT_ID"
SELECT DEPT_CODE FROM EMPLOYEE;
SELECT DEPT_ID FROM DEPARTMENT;

SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE
  FROM EMPLOYEE, DEPARTMENT
 WHERE DEPT_CODE = DEPT_ID;

 

 2) 연결할 두 컬럼명이 같은 경우

-- 전체 사원들의 사번, 사원명, 직급코드, 직급명(EMPLOYEE - JOB_CODE / JOB - JOB_CODE)을 조회
SELECT EMP_ID, EMP_NAME, JOB_CODE, JOB_NAME
  FROM EMPLOYEE, JOB
 WHERE JOB_CODE = JOB_CODE;
-- 에러 발생(AMBIGUOUSLY)

-- 방법1. 테이블명을 이용하는 방법
SELECT EMP_ID, EMP_NAME, EMPLOYEE.JOB_CODE, JOB_NAME
  FROM EMPLOYEE, JOB
 WHERE EMPLOYEE.JOB_CODE = JOB.JOB_CODE;
 
 -- 방법2. 테이블의 별칭 사용(각 테이블마다 별칭 부여 가능)
SELECT EMP_ID, EMP_NAME, E.JOB_CODE, JOB_NAME
  FROM EMPLOYEE E, JOB J
 WHERE E.JOB_CODE = J.JOB_CODE;

ANSI 구문

FROM 절에 기준 테이블 하나 기술

그 뒤에 JOIN절에서 같은 조회하고자 하는 테이블 기술(매칭시킬 컬럼에 대한 조건도 기술)

 

 1) 연결할 두 컬럼명이 다른 경우( ON 구문만 사용 가능)

-- 사번, 사원명, 부서코드, 부서명
SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE
  FROM EMPLOYEE
/*INNER*/ JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID); -- INNER 생략 가능

 

 2) 연결할 두 컬럼명이 같은 경우 ( ON /USING 구문 사용)

  2-1) ON 구문 이용: AMBIGUOUSLY 에러가 발생할 수 있기 때문에 명시

SELECT EMP_ID, EMP_NAME, E.JOB_CODE, JOB_NAME
  FROM EMPLOYEE E
  JOIN JOB J ON (E.JOB_CODE = J.JOB_CODE);

  

  2-2) USING 구문 이용: AMBIGUOUSLY 에러 발생 X  / 알아서 매칭 

SELECT EMP_ID, EMP_NAME, JOB_CODE, JOB_NAME
  FROM EMPLOYEE
  JOIN JOB USING (JOB_CODE);

 

 

JOIN 을 이용한 조회시 추가적인 조건 제시도 가능

Oracle 전용 구문

-- 직급이 대리인 사원들의 정보 조회
SELECT EMP_ID, EMP_NAME, SLALRY, JOB_NAME
--             EMPLOYEE            JOB
   FROM EMPLOYEE E, JOB J
  WHERE E.JOB_CODE = J.JOB_CODE
    AND JOB_NAME = '대리';

 

ANSI 전용 구문

1) ON

SELECT EMP_ID, EMP_NAME, SALARY, JOB_NAME
--             EMPLOYEE            JOB
  FROM EMPLOYEE E
  JOIN JOB J ON (E.JOB_CODE = J.JOB_CODE)
 WHERE JOB_NAME = '대리';

 

2) USING

SELECT EMP_ID, EMP_NAME, SALARY, JOB_NAME
--             EMPLOYEE            JOB
  FROM EMPLOYEE
/*INNER*/ JOIN JOB USING (JOB_CODE)
 WHERE JOB_NAME = '대리';

 

 

 

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

[Oracle] 조인(JOIN) : 등가(EQUAL)조인 / 내부(INNER)조인 (ANSI 조인 / Oracle 조인) JOIN 두 개 이상의 테이블에서 데이터를 같이 조회하고자 할때 사용하며, 조회 결과는 하나의 결과로 나온다. 무작정 JOIN

jaynarecord.tistory.com

 

 

[Oracle] 조인(JOIN) : 카테시안 곱(CARTESIAN PRODUCT) / 교차(CROSS)조인 / 비등가 조인(NON EQUAL JOIN)

[Oracle] 조인(JOIN) : 포괄조인 / 외부(OUTER) 조인 (ANSI 조인 / Oracle 조인) [Oracle] 조인(JOIN) : 등가(EQUAL)조인 / 내부(INNER)조인 (ANSI 조인 / Oracle 조인) JOIN 두 개 이상의 테이블에서 데이터를 같이 조회하

jaynarecord.tistory.com

 

 

[Oracle] 조인(JOIN) : 자체조인(SELF JOIN) / 다중 JOIN

[Oracle] 조인(JOIN) : 카테시안 곱(CARTESIAN PRODUCT) / 교차(CROSS)조인 / 비등가 조인(NON EQUAL JOIN) [Oracle] 조인(JOIN) : 포괄조인 / 외부(OUTER) 조인 (ANSI 조인 / Oracle 조인) [Oracle] 조인(JOIN) : 등가(EQUAL)조인 / 내

jaynarecord.tistory.com

 

728x90