본문 바로가기

Oracle/Oracle Programming

[Oracle] EQUI JOIN

반응형

EQUI JOIN

 -. EQUI JOIN은 가장 많이 사용하는 조인 방법으로 조인 대상이 되는 두 테이블에서 공통적으로 존재하는

    컬럼의 일치되는 행을 연결하여 결과를 생성하는 조인 방법이다.


① 사원들의 소속 부서를 출력하기 위해서 두 개의 테이블을 조인한 경우

SQL> SELECT *

         FROM emp, dept

         WHERE emp.deptno = dept.deptno;

풀이)

 -. 사원(emp) 테이블과 부서(dept) 테이블의 고통 컬럼인 deptno의 값이 일치(=)되는 조건을 WHERE절에 기술하여 사용

 -. 두 테이블을 조인하려면 일치되는 공통 컬럼을 사용해야 한다.

 -. 컬럼의 이름이 같게 되면 혼돈이 오기 때문에 컬럼명 앞에 테이블 명을 기술한다.


-. 조인문은 특별한 키워드 없이 SELECT문의 FROM 절에 사원(emp) 테이블과 부서(dept)테이블을 동시에 기술해야한다.

FROM emp, dept


-. WHERE 절에 두 테이블에 공통된 컬럼을 조인 조건으로 제시한다.

-. 조인 조건을 명시하지 않으면 두 테이블의 모든 로우가 서로 결합한 곱집합(CARTESIAN PRODUCT)이 생성되므로

   반드시 WHERE 절에 조인 조건을 명시해야 한다.

-. 조인 조건은 테이블 N개를 조인 시 N-1개의 조인 조건을 주어야 한다.

2개 테이블 조인시는 조인 조건 1, 4개인 경우는 3개의 조인 조건을 주어야만

곱집합이 생성되는 것을 막을 수 있다.

WHERE emp.deptno = dept.deptno;


-. 조인 명령어를 수행하고 나면 두 개의 테이블의 모든 컬럼을 포함한 결과를 구한다.

 

인된 결과에서 특정 컬럼만을 추출하기 위해서는 SELECT 다음에 원하는 컬럼을 기술한다.

SQL> SELECT ename, dname

         FROM emp, dept

         WHERE emp.deptno = dept.deptno



01. 컬럼명의 모호성 해결

 -. 두 개 이상의 테이블을 조인할 경우 두 테이블에 공통적으로 들어 있는 컬럼 명이 있을 경우 이들은 어느 소속인지 불분명하기에 애매모호한 상태가 된다.

 -. 동일한 컬럼 이름에 접근하려고 할 경우에 컬럼 이름이 중복되어 구별이 어려워 애매하다는 에러 발생

 

동일한 컬럼 이름에 접근

SQL> SELECT ename, dname

         FROM emp, dept

         WHERE deptno = deptno;

에러)

ORA-00918: 열의 정의가 애매합니다

00918. 00000 -  "column ambiguously defined"

*Cause:   
*Action:
3행, 15열에서 오류 발생

풀이)

 -. WHERE 절에 두 테이블(emp, dept)에 동일한 이름으로 정의도어 있는 컬럼(deptno)

    아무런 구분없이 사용하게 되면 애매모호한 상태가 된다.


컬럼이 어느 테이블 소속인지 구분하는 쿼리

SQL> SELECT ename, dname, emp.deptno, dept.deptno

         FROM emp, dept

         WHERE emp.deptno = dept.deptno;



02. 테이블명에 별칭 부여

 -. 테이블명이 너무 긴 경우에는 컬럼명 앞에 테이블명을 붙이기가 번거로우므로 간단하게 별칭을 부여해서 지정하면 문장이 간단해 보인다.

 -. 테이블 명에 별칭을 부여하기 위해서는 FROM 절 다음에 이름을 명시하고 공백을 둔 다음에 테이블의 별칭을 지정해야 한다.

 

사원 테이블과 부서 테이블에 별칭을 부여한 예제

SQL> SELECT e.ename, d.dname, e.deptno, d.deptno

         FROM emp e, dept d

         WHERE e.deptno = d.deptno;



03. EQUI JOIN AND 연산을 추가하여 검색하기

 -. WHERE 절에서 AND 연산자를 이용하여 조인 조건에 검색 조건을 추가할 수 있다.

SQL> SELECT ename, dname

         FROM emp, dept

         WHERE emp.deptno = dept.deptno

         AND emp.ename = 'SCOTT';

풀이)

 -. 사원명이 SCOTT인 사람의 부서명을 출력하기 위해서는 위에서 살펴본 조인 명령어인 사원과

    부서 두 테이블을 조인하는 쿼리문 다음에 사원명이 SCOTT인 사람을 검색하는 조건문을 추가하면 된다.


반응형

'Oracle > Oracle Programming' 카테고리의 다른 글

[Oralce] SELF JOIN  (0) 2012.11.28
[Oracle] NON-EQUI JOIN  (0) 2012.11.28
[Oracle] 조인의 기본 개념  (0) 2012.11.27
[Oracle] HAVING 절  (1) 2012.11.25
[Oracle] GROUP BY 절  (0) 2012.11.25