[Oracle] 19.JOIN(2)
NATURAL JOIN
저번 장에 이어서 조인에 대해 더 알아보겠습니다.
NATURAL JOIN은 조인 할 테이블들에 공통이름을 가진 속성이 있을 때,
조건을 명시하지 않고 자동으로 맵핑해주는 것입니다.
SELECT
*
FROM
employees
NATURAL JOIN departments;
OUTER JOIN
OUTER JOIN은 조건이 맞지 않아도 값을 가져오기 위해서 사용됩니다!
LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN이 있습니다!
예를들어 다음 두 테이블이 있다고 합시다.
두 테이블을 LEFT OUTER JOIN 하는 방법은 다음과 같습니다.
SELECT *
FROM dept02 LEFT OUTER JOIN dept03
ON dept02.deptno = dept03.deptno;
또는
SELECT *
FROM dept02,dept03
WHERE dept02.deptno = dept03.deptno(+);
결과를 보시면 DEPT02의 RESEARCH라는 부서가 DEPT03에 맵핑이 되지 않았지만 조회가 되고 있습니다!
이번에는, RIGHT OUTER JOIN을 해봅시다!
Select *
From Dept02 Right Outer Join Dept03
On Dept02.Deptno = Dept03.Deptno;
또는
SELECT *
FROM dept02,dept03
WHERE dept02.deptno(+) = dept03.deptno;
이번에는 DEPT03의 SALES 라는 부서가 DEPT02에 맵핑되지 않았지만 조회되고 있습니다!
맵핑되지 않은 행을 둘다 조회하고 싶으면 FULL OUTER JOIN을 이용합니다!
SELECT *
FROM dept02 FULL OUTER JOIN dept03
ON dept02.deptno = dept03.deptno;
예제
- 사원명, 부서번호, 부서명을 출력하되, 사원이 없는 부서도 출력
SELECT
first_name|| ' '|| last_name "사원 이름",
departments.department_id "부서 번호",
department_name "부서명"
FROM
employees,
departments
WHERE
employees.department_id (+) = departments.department_id;
- 도시별 사원수가 3명 이하인 도시이름과 사원수를 출력하되, 도시이름이 없어도 사원 수 출력
SELECT
locations.city "도시",
COUNT(*) "사원의 수"
FROM
employees,
departments,
locations
WHERE
employees.department_id = departments.department_id (+) --부서와 매핑안되는 사원도 조회
AND departments.location_id = locations.location_id (+) --도시와 매핑안되는 부서도 조회
GROUP BY
locations.city
HAVING
COUNT(*) <= 3
ORDER BY
COUNT(*);