Oracle - 조인의 개념, 내부조인, 외부조인

uglyduck.dev·2020년 9월 27일
0

따라해보기 🎭

목록 보기
10/12

조인의 개념

  • 공통 속성을 중심으로 두 개의 릴레이션을 하나로 합쳐서 새로운 릴레이션을 생성하는 연산이다.

조인(Join)

  • 일반적으로 '내부조인' 방식을 의미

사원 테이블의 성, 이름, 이메일과 부서테이블의 부서명 정보를 조회하라

SELECT EMP.FIRST_NAME, EMP.LAST_NAME, EMP.EMAIL,
       DEP.DEPARTMENT_NAME
FROM EMPLOYEES EMP, DAPATMENTS DEP /* EMP, DEP -> alias */
WHERE EMPLOYEES.DEPARTMENT_ID = DAPATMENTS.DAPATMENT_ID;
FIRST_NAMELAST_NAMEEMAILDEPARTMENT_NAME
JenniferWhalenJWHALENAdministration
MichaelHartsteinMHARTSTEMarketing
PatFayPFAYMarketing
DenRaphaelyDRAPHEALPurchasing

사원 테이블의 성, 이름, 이메일, 부서번호, 직급명, 부서 테이블의 부서명, 직업 테이블의 직업 번호, 직업명을 조회하라

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_NAMELAST_NAMEEMAILDEPARTMENT_IDDEPARTMENT_NAMEJOB_IDJOB_TITLE
JenniferWhalenJHALEN10AdministrationAD_ASSTAdmini...
PatFayPFAY20MarketingMK_REPMarketing....
MichaelHartsteinMHARTSTE20MarketingMK_MANMarketing....
DenRaphaelyDRAPHEAL30PurchasingPU_MANEPurchasing...
SusanMarvrisSMAVRIS40Human ResourcesHR_REPHuman

셀프 조인

  • 자신의 테이블을 두 개의 테이블 처럼 사용**
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_IDFIRST_NAME상사ID상사이름
173Sundita148Gerald
172Elizabeth148Gerald
171William148Gerald
170Tayler148Gerald
169Harrison148Gerald
168Lisa148Gerald
103Alexander102Lex

외부 조인(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_IDFIRST_NAMEDEPARTMENT_IDDEPARTMENT_NAME
198Donald50Shipping
199Douglas50Shipping
200Jenifer10Administration
201Michael20Marketin
203Susan40Human Resoruces
204Hermann70Public Relations Munich
178kimberely(null)(null)

Reference

profile
시행착오, 문제해결 그 어디 즈음에.

0개의 댓글