Oracle SQL 강좌
CROSS JOIN, INNER JOIN, NATURAL JOIN, USING, ON 22 7 99,999+

by 구루비 CROSS JOIN NATURAL JOIN USING ON [2006.02.11]


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
    

참고링크

- 강좌 URL : http://www.gurubee.net/lecture/1879

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by 시근땀 [2006.03.17 14:30:38]
inner join을 사용한 것과 그냥 일반 조인을 사용한 것이
무슨 차이가 있는 건가요?
정말 시근땀이 흐르는군요. 공부하다가 이렇게 긴장한 것 처음이에요.

by MINI [2006.05.23 17:09:36]
다른점 없어요~ 같은거에요..
INNER를 생략해서 JOIN이라고만 쓴거에여..
그러니까 결국 같은거죠... ^^
열공하세요~

by 박정용 [2006.09.12 11:28:18]
inner join시는 차이가 없지만 outer join할 때는 일반적을 (+)= 하는 것에 비해서 상수를 조건값으로 쓸 수 있다는 장점이 있더군요... 그냥 제 경험.

by BULGO [2007.08.06 10:49:32]
잘 보고 갑니다.. 퍼갈게요....BLOG.NAVER.COM/BULGO77

by 쪼인 [2007.11.01 18:59:05]
만약에 테이블 세개 중에서 두개만 조인한다면
sql> select A.id, B.name, C.age from A a B b join C c ON B.id=C.id;
라고 하는게 맞는건지.. 여러개의 테이블을 조인할때는 어떤규칙으로 하는거죠???

by 웅 [2007.11.02 15:14:30]
left join이나 right join 처럼 방향을 정하지 않은 한 왼쪽 부터 조인됩니다.
아래처럼 가로로 묶어도 처리되네요.
from ((a join b ) join c) join d

by 김 [2007.12.27 11:41:03]
inner join과 일반적인 sql의 차이가 뭔가요?
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입