Oracle Join함수 사용 (10)


하나 이상의 테이블을 조인하기 위해서 사용합니다.
사원 테이블과 부서 테이블을 하나의 결과를 만들어서 보여주고자 한다.




oEQUIJOIN








oNON-EQUIJOIN


Emp = 사원 정보 테이블
Sal grade = 호봉 정보 테이블
Losal = 각 호봉의 최소 연봉
Hisal =  " 최대 연봉

같은 호봉이라도 연봉차이가 있다는 가정이다.





원하는 결과가 제대로 나오지 않는다. 2개의 값이 카티션프로덕트로 출력됨.
이 문제는 다음번 장에서 배우자.


한쪽 칼럼이 없는 곳에 Outer Join한다. 그렇지 않으면 에러는 안나지만 보여줄게 없다.

Outer Join하면 셀프 조인 시 매니저가 없는 직원도 출력하게 할 수 있다.(ex_King사장)

Outer Join 이란?
- Equi Join은 조인을 생성하려는 두 개의 테이블의 한쪽 컬럼에서 값이 없다면 테이터를 반환하지 못한다.
- 동일 조건에서 조인 조건을 만족하는 값이 없는 행들을 조회하기 위해 Outer Join을 사용 한다.
- Outer Join 연산자는 "(+)" 이다.
- 조인시 값이 없는 조인측에 "(+)"를 위치 시킨다.
- Outer Join 연산자는 표현식의 한 편에만 올 수 있다.










두개 이상의 테이블이 조인될 때 WHERE절에 공동되는 컬럼에 의한 조인이 발생되지 않아 모든 데이터가 검색 결과로 나타나는 경우이다.
그래서 데이블에 존재하는 모든 데이터가 검색 결과로 나타난다.
[SELECT * FROM EMP, DEPT;] 쿼리문을 실행하면
컬럼수는 11개(EMP컬럼 8개 + DEPT컬럼 4개 - DEPTNO 중복컬럼 1개)와 로우수는 56개(EMP로우 14개 * DEPT로우 4개)로 아무런 의미를 갖지 못한다.
조인 결과가 의미를 가지려면, WHERE절에 올바른 조인 조건을 지정해야 한다.


o Cartesian Product





검색하고자 했던 데이터 뿐 아니라 JOIN에 사용된
테이블들의 모든 데이터가 Return 되는 현상



o ON JOIN

조인 서술부(ON 절)와 비조인 서술부(WHERE 절)를 분리하여 이해가 쉽습니다.
ON 절을 이용하면 JOIN 이후에 논리 연산과 서브쿼리와 같은 추가 서술을 할 수 있습
니다.
Natural 조인과 달리 ON 조인은, 임의의 조인 조건을 지정하거나, 이름이 다른 칼럼
끼리 조인 조건으로 사용하거나, 조인할 칼럼을 명시하기 위해서 사용합니다.


예문)

SELECT E.ENAME, E.DEPTNO, D.DNAME
FROM EMP E JOIN DEPT D
ON (E.DEPTNO = D.DEPTNO)
WHERE E.SAL > 1000;

● 여러 테이블의 조인

SELECT E.EMPNO, D.DNAME , B.SAL
FROM EMP E JOIN DEPT D
ON ( E.DEPTNO = D.DEPTNO )
  JOIN BONUS B
ON ( E.ENAME = B.ENAME );

● WHERE 절과의 혼용

SELECT E.ENAME, E.DEPTNO, D.DEPTNO, D.DNAME
FROM EMP E JOIN DEPT D
ON  ( E.DEPTNO = D.DEPTNO )
WHERE E.EMPNO >= 7000;

● ON 절의 조건 추가

SELECT E.ENAME, E.MGR, D.DEPTNO, D.DNAME
FROM EMP E JOIN DEPT D
ON ( E.DEPTNO = D.DEPTNO  AND  E.MGR = 7698 );

● EXIST 절 사용

SELECT E.EMPNO, E.ENAME, D.DEPTNO, D.DNAME, B.BONUS
FROM EMP E JOIN DEPT D
ON ( E.DEPTNO = D.DEPTNO
     AND NOT EXISTS (SELECT 1
                         FROM BONUS B
                        WHERE E.ENAME = B.ENAME) );





0 comments:

Post a Comment