| 
				
				
					|  |  
					|  |  
					
				 
					|  |  
					|   |  
					|  |  
					|  |  
					|  |  
					|  |  
					|  |  
					|  |  
					|  |  
					|  |  
					|  |  
					| 
							
								| 6만원 이상 무료배송 |  
								|  |  
								| 주문하시는 총상품금액의 합계가
 6만원 이상일 경우
 택배비가 무료입니다.
 |  |  
					|  |  
					|  |  |  | 
	
		|  |  
		|  |  
		|  
				
					| 조인(Join)의 종류 - CROSS/INNER/NATURAL/USING/.. |  |  
		|  |  
		|  
				
					| 작성자: 
						
							어라
						
						  
						
							작성일: 2009-07-07 11:05  
						
						조회: 17685  
						댓글: 0 |  |  
		|  |  
		| 
				
					| 
| Oracle 9i 부터는 ANSI/ISO SQL: 1999 STANDARD 를 지원합니다. 
 
| ☞ CROSS JOIN 
 - Cartesian product 값을 얻을때 사용 합니다.
 
 -- 아래 SQL문장의 결과를 확인해 보세요
 SQL>SELECT ename FROM emp CROSS JOIN dept
 
 
 |  
 
| ☞ INNER JOIN 
 - 일반 조인시 ,를 생략하고 INNER JOIN을 추가하고 WHERE절대신 ON절을 사용해야 합니다.
 - INNER는 생략 가능합니다.
 - 아래의 두 SQL 문장을 비교해 보세요.
 
 --  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 
 - Equijoin과 동일하다고 보시면 됩니다.
 - 두 테이블의 동일한 이름을 가지는 칼럼은 모두 조인이 됩니다.
 - 동일한 컬럼을 내부적으로 찾게 되므로 테이블 Alias를 주면 오류가 발생 합니다.
 - 동일한 컬럼이 두개 이상일 경우 JOIN~USING문장으로 조인되는 컬럼을 제어 할 수 있습니다.
 - 아래의 두 SQL 문장을 비교해 보세요.
 
 -- NATURAL JOIN을 사용한 SQL 문장.
 SQL>SELECT empno, ename, deptno FROM emp NATURAL JOIN dept
 
 -- Oracle9i 이전에 일반적인 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문장을 실행시켜 주세요.
 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
 
 |    |  
 |  |  
		|  |  
		|  |  
		|  |  
		| * 관련 댓글 한말씀 부탁합니다. |  
		|  |  |