■ 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: |
풀이) -. 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 |