DataBase/Oracle

7. Oracle 조인

유가엘 2020. 3. 26. 16:48

6_Join.sql
0.00MB

JOIN이란?

두개 이상의 테이블의 공통된 속성을 묶어 원하는 결과값을 표현하는 방식입니다.

 

예시 - HR 스키마

DEPARTMENTS , EMPLOYEES 테이블을 분리해 놓은 이유는 데이터를 별도로 관리하기 위함입니다. 
만약 EMPLOYEES 의 DEPARTMENT_ID 로는 부서명을 정확히 알 수 없으며,
DEPARTMENTS 테이블의 DEPARTMENT_NAME에 표현되어있습니다.

INNER JOIN - 일반적인 JOIN을 의미합니다.

SELECT EMPLOYEES.FIRST_NAME, EMPLOYEES.LAST_NAME, EMPLOYEES.EMAIL, DEPARTMENTS.DEPARTMENT_NAME  
FROM EMPLOYEES, DEPARTMENTS 
WHERE EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID; 
-- 직원테이블과 부서 테이블의 DEPARTMENT_ID가 동일할 경우, FIRST_NAME,LAST_NAME,EMAIL,DEPARTMENT_NAME을 출력해주세요 

 

별칭을 사용한 INNER JOIN

SELECT EMP.FIRST_NAME, EMP.LAST_NAME, EMP.EMAIL, DEPT.DEPARTMENT_NAME  
FROM EMPLOYEES EMP, DEPARTMENTS DEPT 
WHERE EMP.DEPARTMENT_ID = DEPT.DEPARTMENT_ID; 
-- 테이블명을 전부 기재할 경우, 길이가 길기때문에 별칭을 사용할 수 있습니다. 

 

조건절과 함꼐 사용한 INNER JOIN

 SELECT EMP.FIRST_NAME,EMP.LAST_NAME,EMP.EMAIL,EMP.DEPARTMENT_ID, 
        DEPT.DEPARTMENT_NAME,EMP.JOB_ID,JOB.JOB_TITLE,LOC.CITY 
 FROM EMPLOYEES EMP, DEPARTMENTS DEPT, JOBS JOB,LOCATIONS LOC 
 WHERE EMP.DEPARTMENT_ID = DEPT.DEPARTMENT_ID 
 AND EMP.JOB_ID = JOB.JOB_ID 
 AND DEPT.LOCATION_ID = LOC.LOCATION_ID 
 AND LOC.CITY = 'Seattle'; 
 -- 4개의 테이블을 연결하여 원하는 결과값을 출력할 수 있습니다. 


  SELF JOIN 이란?
 하나의 테이블을 2개처럼 사용하는 방식입니다.
 원하는 결과값이 같은 테이블에 있을경우, 하나의 테이블에 다른 별칭을 주어 
 2개의 테이블처럼 사용할 수 있습니다.
 HR 스키마에서 직원코드와 직원명 그에따른 상사코드 상사명 을 샘플로 출력 할 수 있습니다.

 SELECT EMP1.EMPLOYEE_ID, EMP1.FIRST_NAME, EMP2.EMPLOYEE_ID 관리자코드,EMP2.FIRST_NAME 관리자이름 
 FROM EMPLOYEES EMP1 , EMPLOYEES EMP2 
 WHERE EMP1.MANAGER_ID = EMP2.EMPLOYEE_ID; 

 

OUTER JOIN
 만약 검색 시, 값에 상관없이 모든 목록을 출력하고 싶다면 조건마다 (+)를 선언함으로써,
 외부조인을 만들어야합니다.
 그렇지 않을경우, NULL 값에 대해서는 검색하지 않으며, 원하는 값과 다른 결과물이 출력됩니다.

 SELECT EMP.EMPLOYEE_ID, EMP.FIRST_NAME, EMP.DEPARTMENT_ID, DEPT.DEPARTMENT_NAME,LOC.CITY 
 FROM EMPLOYEES EMP, DEPARTMENTS DEPT, LOCATIONS LOC 
 WHERE EMP.DEPARTMENT_ID = DEPT.DEPARTMENT_ID (+) 
 AND DEPT.LOCATION_ID = LOC.LOCATION_ID (+);