JOIN (Inner, Outer, Self)
| 구분 | 이름 | 내용 | 비고 |
|---|---|---|---|
| INNER JOIN | EQUI-JOIN |
–Oracle Join SELECT A.col, B.col FROM A,B WHERE A.col=B.col; –Ansi Join (A,B의 컬럼명이 달라도 ok) SELECT A.col, B.col FROM A JOIN B WHERE A.col=B.col; –NATURAL JOIN (자연조인) (A,B 같은 컬럼명이 존재해야 함) SELECT col1,col2,col3 FROM A NATURAL JOIN B –JOIN USING (A,B 같은 컬럼명이 존재해야 함) SELECT col1,col2,col3 FROM A JOIN B USING(col) |
|
| NON-EQUI-JOIN |
관계연산자(>,<,>=,<=) 혹은 BETWEEN~AND 를 씀 |
||
| OUTER JOIN | LEFT OUTER JOIN | ||
| RIGHT OUTER JOIN | |||
| FULL OUTER JOIN | |||
| SELF JOIN |
조인
1. EQUI-JOIN
–(1)오라클 조인
SELECT ename,hiredate,sal,dname,loc
FROM emp,dept
WHERE emp.deptno=dept.deptno;
–(2)안시 조인
SELECT ename,hiredate,sal,dname,loc
FROM emp JOIN dept
ON emp.deptno=dept.deptno;
–(3)내츄럴 조인
SELECT ename,hiredate,sal,dname,loc
FROM emp NATURAL JOIN dept;
–(4)조인유징
SELECT ename,hiredate,sal,dname,loc
FROM emp JOIN dept USING(deptno);
|
ex) 30번 부서에 근무하는 사원의 이름, 직위, 부서명, 근무지 출력 SELECT ename,job,dname,loc ex) A가 포함된 사원의 이름, 부서명, 입사일을 출력 ex) COMM을 받는 사원의 이름,근무지,급여,성과급(단, 0을 받는 사원은 제외) ex) DALLAS에서 근무하는 사원의 이름과 부서번호 |
2. NON-EQUI-JOIN
NON-EQUI-JOIN
SELECT ename,sal,grade,losal,hisal
FROM emp,salgrade;
–위를 아래와 같이 변경해보자.
SELECT ename,sal,grade,losal,hisal
FROM emp,salgrade
WHERE sal BETWEEN losal AND hisal;
|
ex) 사원 정보 중에 이름, 급여, 입사일, 부서명, 근무지, 급여등급 SELECT ename,sal,hiredate,dname,loc,grade |
3. OUTER JOIN
3-1. 레프트 아우터 조인(오라클 타입)
|
–본인이름, 사수의 이름 |
–사수(오른쪽)가 값이 없어도(NULL) 가져옴
–널값이 있는 곳에 플러스를 붙여줌
–플러스를 붙인 곳(=널값이 있는 곳=오른쪽)의 반대편이 조인의 이름임(레프트 아우터 조인)
–레프트 아우터 조인: 오른쪽이 널값이어도 왼쪽값을 가져옴
3-2. 레프트 아우터 조인(안시 타입)
|
–본인이름, 사수의 이름 |
4. SELF JOIN
셀프조인
–본인이름, 사수의 이름
SELECT e1.ename “본인”, e2.ename “사수”
FROM emp e1,emp e2
WHERE e1.mgr=e2.empno;
|
ex) BLAKE 사원보다 늦게 입사한 사원들의 이름,부서명, 입사일 –<셀프조인으로 풀기> SELECT e1.ename,dname,e1.hiredate –<서브 쿼리로 풀기> SELECT ename,dname,hiredate |