*SQL_Oracle*

DML < SELECT> JOIN

깐부로부터 2021. 11. 5. 00:37

두 개 이상의 테이블에서 데이터를 같이 조회하고자 할 때
조회 결과는 하나의 결과물(RESULT SET)로 나옴
    
관계형 데이터베이스에서는 최소한의 데이터로
각각의 테이블에 데이터를 보관하고 있음 

-> 관계를 맺어본적이 없다.
    
JOIN구문을 이용해서 여러개 테이블 간 "관계"를 맺어서 조회하는법을

공부할 것이다!!! 
   

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

1. 등가조인( EQUAL JOIN) / 내부조인(INNER JOIN)
    
연결시키는 컬럼의 값이 일치하는 행들만 조인되서 조회
( ==  일치하지 않는 값들은 조회에서 제외)

 

[오라클] 전용구문
--> FROM절에 조회하고자 하는 테이블들을 나열(,)
-- WHERE절에 매칭시킬 컬럼명(연결고리)에 대한 조건을 제시함

-- 전체 사원들의 사번, 사원명, 부서코드, 부서명 같이 조회
-- 1) 연결할 두 컬럼명이 다른경우 
-- (EMPLOYEE - "DEPT_CODE" / DEPARTMENT - "DEPT_ID")

 

-- 사번, 사원명, 직급코드, 직급명(EMPLOYEE - JOB_CODE/ JOB - JOB_CODE)
-- 2) 연결할 두 컬러명이 같은 경우

 

 

[ANSI]구문 (오라클 말고 다른 구문에서 쓸 수 있음)
-- FROM절에 기준 테이블 하나 기술
-- 그 뒤에 JOIN절에서 같이 조회하고자 하는 테이블 기술
-- (매칭시킬 컬럼에 대한 조건도 기술)
-- USING 구문 / ON 구문

 

-- 사번, 사원명, 부서코드, 부서명
-- 1) 연결할 두 컬러명이 다른 경우
-- (EMPLOYEE - "DEPT_CODE"/ DEPARTMENT - "DEPT_ID")
--  무조건 ON구문만 사용 가능(USING구문 절대 못 씀)

앞에 INNER 생략가능

 

-- 사번, 사원명, 직급코드, 직급명
-- 2) 연결할 두 컬럼명이 같은경우
-- (EMPLOYEE - "JOB_CODE" / JOB- "JOB_CODE")
-- ONUSING구문

 

 

-- 추가적인 조건도 제시 가능
-- 직급이 대리인 사원들의 정보 조회
-- 대리들의 사번, 이름, 급여, 직급명


2. 포괄조인 / 외부조인(OUTER JOIN)
   

테이블간의 JOIN 시 일치하지 않는 행도 포함시켜서 조회 가능
단, 반드시 LEFT / RIGHT를 지정해야 함(기준이 되는 테이블을 지정)

 

1) LEFT [OUTER] JOIN :
-- 두 테이블 중 왼편에 기술된 테이블을 기준으로 JOIN
-- 즉, 뭐가 되었든 간에 왼편 기술된 테이블의 데이터는 무조건 조회(NULL)
-- (일치하는거 없어도)

 

2) RIGHT [OUTER] JOIN 

 

두 테이블의 오른편에 기술된 테이블을 기준으로 JOIN

 

 

3) FULL [OUTER] JOIN  

 

두테이블이 가진 모든행을 조회

오라클은 FULL JOIN을 할 수가 없다.


3. 카테시안 곱(CARTESTIAN PRODUCT / RYCKWHDLS (CROSS JOIN))

 

모든 테이블의 각 행들이 서로서로 매핑된 데이터가 조회됨(곱집합)
    
    두 테이블의 행들이 모두 곱해진 조합 출력
    => 방대한 데이터 출력
    => 과부하의 위험   

  


5. 자체조인 (SELF JOIN)
    

같은 테이블을 다시 한번 조인하는 경우
자기 자신의 테이블과 조인을 맺는다.


6. 다중 JOIN

EMPLOYEE, DEPARTMENT, JOB 테이블  JOIN 시키기