조인의 개념
- 공통 속성을 중심으로 두 개의 릴레이션을 하나로 합쳐서 새로운 릴레이션을 생성하는 연산이다.
조인(Join)
사원 테이블의 성, 이름, 이메일과 부서테이블의 부서명 정보를 조회하라
SELECT EMP.FIRST_NAME, EMP.LAST_NAME, EMP.EMAIL,
DEP.DEPARTMENT_NAME
FROM EMPLOYEES EMP, DAPATMENTS DEP
WHERE EMPLOYEES.DEPARTMENT_ID = DAPATMENTS.DAPATMENT_ID;
FIRST_NAME | LAST_NAME | EMAIL | DEPARTMENT_NAME |
---|
Jennifer | Whalen | JWHALEN | Administration |
Michael | Hartstein | MHARTSTE | Marketing |
Pat | Fay | PFAY | Marketing |
Den | Raphaely | DRAPHEAL | Purchasing |
사원 테이블의 성, 이름, 이메일, 부서번호, 직급명, 부서 테이블의 부서명, 직업 테이블의 직업 번호, 직업명을 조회하라
SELECT EMP.FIRST_NAME, EMP.LAST_NAME, EMP.EMAIL,
EMP.DEPARTMENT_ID, DEP.DEPARTMENT_NAME
EMP.JOB_ID, JOB.JOB_TITLE
FROM EMPLOYEES EMP,
DEPARTMENTS DEP,
JOBS JOB
WHERE EMP.DEPARTMENT_ID = DEP.DEPARTMENT_ID
AND EMP.JOB_ID = JOB.JOB_ID;
FIST_NAME | LAST_NAME | EMAIL | DEPARTMENT_ID | DEPARTMENT_NAME | JOB_ID | JOB_TITLE |
---|
Jennifer | Whalen | JHALEN | 10 | Administration | AD_ASST | Admini... |
Pat | Fay | PFAY | 20 | Marketing | MK_REP | Marketing.... |
Michael | Hartstein | MHARTSTE | 20 | Marketing | MK_MAN | Marketing.... |
Den | Raphaely | DRAPHEAL | 30 | Purchasing | PU_MANE | Purchasing... |
Susan | Marvris | SMAVRIS | 40 | Human Resources | HR_REP | Human |
셀프 조인
- 자신의 테이블을 두 개의 테이블 처럼 사용**
SELECT EMP1.EMPLOYEE_ID, EMP1.FIRST_NAME,
EMP2.EMPLOYEE_ID 상사id,
EMP2.FIRST_NAME 상사이름
FROM EMPLOYEES EMP1, EMPLOYEES EMP2
WHERE EMP1.MANAGER_ID = EMP2.EMPLOYEE_ID
EMPLOYEE_ID | FIRST_NAME | 상사ID | 상사이름 |
---|
173 | Sundita | 148 | Gerald |
172 | Elizabeth | 148 | Gerald |
171 | William | 148 | Gerald |
170 | Tayler | 148 | Gerald |
169 | Harrison | 148 | Gerald |
168 | Lisa | 148 | Gerald |
103 | Alexander | 102 | Lex |
외부 조인(Outer Join)
- 보통의 조인인 내부 조인(Inner Join)을 확장한 개념이다.
- 한 릴레이션에 있는 어떤 튜플에 대해 조인할 상대 릴레이션에 대응되는 튜플이 없을 경우 이를 제외시키지 않고 상대를 널(Null) 튜플로 만들어 결과 릴레이션에 포함시키는 조인이다.
- 좌측 외부 조인(Left Outer JOIN): 먼저 지정한 릴레이션의 외부 조인
- 우측 외부 조인(Right Outer JOIN): 나중에 지정한 릴레이션의 외부 조인
- 전체 외부 조인(Full Outer JOIN): 좌측 외부 조인 + 우측 외부 조인
SELECT EMP.EMPLYEE_ID,
EMP.FIRST_NAME,
EMP.DEPARTMENT_ID,
DEP,DEPARTMENT_NAME,
LOC.CITY
FROM EMPLOYEES EMP, DEPARTMENTS DEP, LOCATIONS LOC
WHERE EMP.DEPARTMENT_ID = DEP.DEPARTMENT_ID (+)
AND DEP.LOCATION_ID = LOC.LOCATION_ID (+);
EMPLOYEE_ID | FIRST_NAME | DEPARTMENT_ID | DEPARTMENT_NAME |
---|
198 | Donald | 50 | Shipping |
199 | Douglas | 50 | Shipping |
200 | Jenifer | 10 | Administration |
201 | Michael | 20 | Marketin |
203 | Susan | 40 | Human Resoruces |
204 | Hermann | 70 | Public Relations Munich |
178 | kimberely | (null) | (null) |
Reference