오라클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