JOIN
두 개 이상의 테이블을 연결하여 데이터를 조회할 때 사용하는 구문
아래 예문을 통해 알아보자
SELECT dept.department_id, dept.department_name, dept.location_id,
loca.location_id, loca.city
FROM departments dept JOIN locations loca
ON dept.location_id = loca.location_id;
departments 테이블의 별칭은 dept
JOIN하는 locations 테이블의 별칭은 loca
보여줄 컬럼은,
departments 테이블의 department_id, department_name
locations 테이블의 location_id, city
JOIN 시 연결시켜줄 조건은,
departments 테이블의 location_id와
locations 테이블의 location_id가 같을 때 연결시켜준다
즉, departments의 테이블에 location_id(지역 구분번호)가 있는데
이 지역 구분번호의 지역명은 이 테이블이 명시되어 있지 않아서
location_id의 지역명이 담긴(city) 정보를 같이 연결하여 불러오고 싶은데
두 테이블의 서로 정확히 일치하는 정보는 location_id라 같이 묶어준 것이다
어느 하나의 테이블에서 여러 개의 테이블을 참조하려면 어떻게 할까?
구문이 길어지고 복잡해서 끊어서 써보았다
SELECT emp.employee_id, emp.last_name,
dept.department_id, dept.department_name, dept.location_id,
loc.city, loc.country_id,
cou.country_name, cou.region_id,
reg.region_name
FROM employees emp
JOIN departments dept
ON emp.department_id = dept.department_id
JOIN locations loc
ON dept.location_id = loc.location_id
JOIN countries cou
ON loc.country_id = cou.country_id
JOIN regions reg
ON cou.region_id = reg.region_id;
FROM emp
JOIN dept
ON emp와 dept의 동일한 값을 가진 연결 컬럼
JOIN loc
ON dept와 loc의 동일한 값을 가진 연결 컬럼
JOIN cou
ON loc과 cou의 동일한 값을 가진 연결 컬럼
JOIN reg
ON cou와 reg의 동일한 값을 가진 연결 컬럼
천천히 해석해보면 서로가 통일된 동일한 값을 가져 하나의 행 처럼 연결할 수 있는 것이다
선JOIN 후JOIN의 연결 가능한 고정 값이 있다면 가능한 영역까지 계속 연결이 가능하다
Self-Join
다른 테이블을 참조하는 것이 아닌 자신의 테이블의 행끼리 연결할 때 사용하는 구문
하나의 테이블에 연관지어서 연결할 수 있는 컬럼이 있는 경우 같은 테이블이라도 행과 행끼리 연결한 결과를 얻을 수 있다.
예제) employees 테이블의 manager_id 컬럼은 해당 행의 사원을 관리하는 매니저 사원의 employee_id 정보이다
매니저의 직책을 가지는 사원도 마찬가지로 사원이기 때문에 employees 테이블에 속해있다
사원과 사원을 관리하는 매니저의 정보를 연결해서 보고 싶다면,
사원의 정보 중 manager_id에 있는 값과 동일한 employee_id의 값을 가지는 행을 선택하고 조인하여 결과를 얻을 수 있다
SELECT 부하직원.employee_id, 부하직원.last_name,
매니저.employee_id, 매니저.last_name
FROM employees 부하직원 JOIN employees 매니저
ON 부하직원.manager_id = 매니저.employee_id;
매니저.manager_id는 매니저의 사원번호(employee_id)가 나온다
'BackEnd > DataBase - Oracle' 카테고리의 다른 글
[Oracle] DML - 트랜잭션(Transaction) (0) | 2020.02.13 |
---|---|
[Oracle] 서브 쿼리(Sub Query) (0) | 2020.02.13 |
[Oracle] 그룹으로 묶는 GROUP BY절과 HAVING절 (0) | 2020.02.13 |
[Oracle] 변환 함수 (0) | 2020.02.12 |
[Oracle] 날짜 함수 (0) | 2020.02.12 |