CROSS JOIN
Cartesian Product 값을 얻을때 사용 한다.
-- 아래 SQL문장을 실행해 보자
SQL> SELECT ename
FROM emp CROSS JOIN dept
INNER JOIN
· - 일반 조인시 ,(콤마)를 생략하고 INNER JOIN을 추가하고, WHERE절 대신 ON절을 사용하면 된다.
· - INNER는 생략 가능 하다.
· - 아래 두 조인의 결과 값은 같다.
-- INNER JOIN을 사용한 문장
SQL> SELECT e.empno, e.ename
FROM dept d INNER JOIN emp e
ON d.deptno=e.deptno;
-- 일반적인 SQL 문장
SQL> SELECT e.empno, e.ename
FROM dept d , emp e
WHERE d.deptno=e.deptno;
NATURAL JOIN
· - Equi Join과 동일 하다고 보면 된다.
· - 두 테이블의 동일한 이름을 가지는 칼럼은 모두 조인이 된다.
· - 동일한 컬럼을 내부적으로 찾게 되므로 테이블 Alias를 주면 오류가 발생 한다.
· - 동일한 컬럼이 두개 이상일 경우 JOIN~USING 문장으로 조인되는 컬럼을 제어 할 수 있다.
· - 아래 두 조인의 결과 값은 같다.
-- NATURAL JOIN을 사용한 SQL 문장.
SQL> SELECT empno, ename, deptno
FROM emp NATURAL JOIN dept
-- 일반적인 SQL 문장
SQL> SELECT e.empno, e.ename, d.deptno
FROM emp e, dept d
WHERE e.deptno=d.deptno
JOIN ~ USING
· - NATURAL JOIN의 단점은 동일한 이름을 가지는 칼럼은 모두 조인이 되는데, USING 문을 사용하면 컬럼을 선택해서 조인을 할 수가 있다.
· - USING절 안에 포함되는 컬럼에 Alias를 지정하면 오류가 발생 한다.
-- 일반적인 사용 방법
SQL> SELECT e.empno, e.ename, deptno
FROM emp e JOIN dept d USING(deptno)
ON 구문
· - 조인 조건을 지정 할 수 있다.
· - 모든 논리 연산 및 서브쿼리를 지정할 수 있다.
-- 테스트를 위해 scott유저에서 아래 insert문장을 실행시킨다.
SQL> INSERT INTO bonus(ename, job, sal) VALUES('SMITH','CLERK',500);
-- ON절 사용 예제 (multi-table joins)
SQL> SELECT e.empno, e.ename, e.sal
FROM emp e JOIN dept d ON (e.deptno=d.deptno)
JOIN bonus b ON (b.ename = e.ename)
WHERE e.sal IS NOT NULL
'IT개발 > Database' 카테고리의 다른 글
[Oracle] 오라클 고급쿼리 – 계층적 쿼리 (level) (1) | 2016.07.17 |
---|---|
[Oracle] DEFAULT 제약조건 이란? (0) | 2014.10.02 |
[Oracle] user 생성 및 권한주기 (0) | 2014.09.07 |
[데이터베이스] 트렌젝션 4가지 속성에 대하여 알아보자 (0) | 2014.03.30 |
[데이터베이스] 클러스터드 인덱스와 넌 클러스터드 인덱스 (0) | 2014.03.30 |