데이터베이스

[오라클]조인 (이너조인, 아우터조인)

늘근이 2014. 5. 12. 11:36

inner join 

null데이터는 비교할수없기때문에 부서가 null이면 이너조인에는 안나온다.

일치하는 조건을 모두 다가지고 옴


SELECT e.empno, e.ename, d.dname

FROM emp e, dept d

WHERE e.deptno = d.deptno


outer join 

null까지 다 가지고옴

(+)를 붙이고, 쁠러스가 붙지 않는쪽이 기존 테이블 (누락시키지 않고 싶은 쪽)

SELECT e.empno, e.ename, d.dname

FROM emp e, dept d

WHERE e.deptno = d.deptno(+)



모든 데이터베이스 공통형식인 ANSI형식으로도 써줄수있다. 


ANSI - inner join (INNER JOIN이라고 명시해서 써줄수도있다)

SELECT e.empno, e.ename, d.dname

FROM emp e

JOIN dept d ON (e.deptno = d.deptno)


ANSI - outer join (LEFT, RIGHT를 써서 기준이 되는 테이블을 명시해야한다. 명시하는대신 OUTER도 생략가능)

SELECT e.empno, e.ename, d.dname

FROM emp e

LEFT OUTER JOIN dept d ON (e.deptno = d.deptno)


* 오라클은 FULL OUTER JOIN이 안된다. ANSI표현으로 써줘야 된다.


쎌프조인이란 신기한것도 있다. 부모글이 있고 답글이 있다면 게시판테이블에 답글도 다 집어넣는데, 어떤글의 답글인지 알아야 한다. 따라서 답글은 부모글의 번호를 가지고있다. 그래서, 셀프조인임!


상사를 찾는 sql을 작성해보자


쎌프쪼인

SELECT e.ename

FROM emp e, emp m

WHERE e.mgr = m.empno


만약 최고관리자까지 뜨고싶다면 m.empno(+)이렇게 명시해준다.



서브쿼리


SELECT empno, sal

FROM emp

WHERE sal > (

SELECT avg(sal)

FROM emp

  );


이런식으로 쓸수있다