DML < SELECT> JOIN
두 개 이상의 테이블에서 데이터를 같이 조회하고자 할 때
조회 결과는 하나의 결과물(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구문 절대 못 씀)
-- 사번, 사원명, 직급코드, 직급명
-- 2) 연결할 두 컬럼명이 같은경우
-- (EMPLOYEE - "JOB_CODE" / JOB- "JOB_CODE")
-- ON, USING구문
-- 추가적인 조건도 제시 가능
-- 직급이 대리인 사원들의 정보 조회
-- 대리들의 사번, 이름, 급여, 직급명
2. 포괄조인 / 외부조인(OUTER JOIN)
테이블간의 JOIN 시 일치하지 않는 행도 포함시켜서 조회 가능
단, 반드시 LEFT / RIGHT를 지정해야 함(기준이 되는 테이블을 지정)
1) LEFT [OUTER] JOIN :
-- 두 테이블 중 왼편에 기술된 테이블을 기준으로 JOIN
-- 즉, 뭐가 되었든 간에 왼편 기술된 테이블의 데이터는 무조건 조회(NULL)
-- (일치하는거 없어도)
2) RIGHT [OUTER] JOIN
두 테이블의 오른편에 기술된 테이블을 기준으로 JOIN
3) FULL [OUTER] JOIN
두테이블이 가진 모든행을 조회
3. 카테시안 곱(CARTESTIAN PRODUCT / RYCKWHDLS (CROSS JOIN))
모든 테이블의 각 행들이 서로서로 매핑된 데이터가 조회됨(곱집합)
두 테이블의 행들이 모두 곱해진 조합 출력
=> 방대한 데이터 출력
=> 과부하의 위험
5. 자체조인 (SELF JOIN)
같은 테이블을 다시 한번 조인하는 경우
자기 자신의 테이블과 조인을 맺는다.
6. 다중 JOIN
EMPLOYEE, DEPARTMENT, JOB 테이블 JOIN 시키기