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 (+);
'DataBase > Oracle' 카테고리의 다른 글
9. Oracle DDL(Table 정의) (0) | 2020.03.26 |
---|---|
8. Oracle 서브쿼리 (0) | 2020.03.26 |
6. Oracle GroupBy, Having 절 (0) | 2020.03.25 |
5. Oracle 날짜 함수 (0) | 2020.03.25 |
4. Oracle 문자열 함수 (0) | 2020.03.25 |