오라클SQL 조인(JOIN)

Updated:

조인 처리과정 이해 및 기본 조인 문장

JOIN

지금까지 테이블 하나로 데이터 조회를 했다면, 조인을 통해 여러 테이블을 조회한다.

데이터베이서에서 여러 테이블의 데이터가 필요한 경우 조인을 사용한다.

해당 컬럼에 존재하는 공통값, 일반적으로 기본 키 및 외래 키 열을 조인 조건으로 사용하여 한 테이블의 행을 다른 테이블의 행에 조인할 수 있다.

카티시안 곱

카티시안 곱은 두 테이블의 조건을 따로 명시하지 않을 경우 두 테이블의 모든 경우를 조인해서 M X N의 결과를 나타내는 것을 말한다. 카타시안 곱이 발생하지 않도록 WHERE절에 항상 유효한 조인 조건을 지정해야 한다.

SELECT player.player_name 선수명, team.team_name 팀명
FROM player, team;

조인문장

FROM 절에 사용할 테이블들을 콤마로 구분해서 모두 적는다. 적절한 join조건을 WHERE절에 지정한다. 일반적으로 테이블 개수 - 1개의 조인 조건이 필요하다.

SELECT player.player_name 선수명, team.team_name 소속팀명
FROM player, team
WHERE player.team_id = team.team_id;

테이블 이름을 명칭

SELECT player.player_name, player.team_id, team.team_id, team.team_name
FROM player, team
WHERE player.team_id = team.team_id AND player.team_id > 'K09'
ORDER BY player.player_name;

--테이블 별칭 지정한 경우
SELECT P.player.name, P.team_id, T.team_id, T.team_name
FROM player P, team T
WHERE P.team_id = T.team_id AND P.team_id > 'K09'
ORDER BY P.player_name;

오류가 나면 먼저 FROM절을 먼저 보고 WHERE절 HAVING절 등을 보고 문제를 찾는다.

범위 검색을 이용한 조인 처리

--BETWEEN 을 이용한 범위 검색
SELECT e.empno, e.name, e.sal, s.grade, s.losal, s.hisal
FROM salgrade s, emp e
WHERE e.sal BETWEEN  s.losal AND s.hisal;

OUTER 조인

지금까지 조인은 INNER 조인으로 WHERE절 조건에 맞는 결과만 반환했습니다. 하지만 조인 조건을 만족하지 않더라도 조회를 하고 싶을 경우도 있습니다. 그럴 때는 OUTER 조인을 사용합니다.

’+’ 연산자를 사용합니다.

SELECT e.empno, e.ename, e.job, e.deptno e_deptno, d.deptno d_deptno, d.dname
FROM dept d, emp e
WHERE d.deptno = e.deptno(+);

--+를 어디에 붙이느냐에 따라 출력 결과가 다르다.
--dept에 +를 붙인 경우 locations의 loc_code가 만족하지 않는 값도 출력한다.
SELECT d.deptno, d.dname, l.loc_code, l.city
FROM dept d, locations l
WHERE d.loc_code(+) = l.loc_code;

SELECT d.deptno, d.dname, l.loc_code, l.city
FROM dept d, locations l
WHERE d.loc_code = l.loc_code(+);

Comments