OUTER JOIN
조인 조건에서 동일한 값이 없는 행도 반환해준다.
left outer join(왼쪽 테이블의 모든 행이 반환된다.)
right outer join(오른쪽 테이블의 모든 행이 반환된다.)
- left outer join
SQL> select e.ename, e.job, d.deptno, d.dname
2 from emp e, dept d
3 where d.deptno=e.deptno(+);
//dept테이블의 모든 행이 출력될 수 있도록 emp필드의 행을 맞추라는 의미
//dep테이블의 deptno=40 인 행도 출력된다, emp와 대응되는 없는 행을 표시
ENAME JOB DEPTNO DNAME
---------- --------- ---------- --------------
CLARK MANAGER 10 ACCOUNTING
...
MARTIN SALESMAN 30 SALES
40 OPERATIONS
- right outer join
//이름에 A가 들어간 사원
select e.empno, e.ename, e.job, d.deptno, d.dname
from emp e, dept d
where e.deptno(+)=d.deptno and e.ename like ‘%A%’;
********************************************
inner join => and,or 둘다 사용가능
outer join => and만 사용가능/ in,or 사용불가
********************************************
SELF JOIN
한 테이블 내에서 조인한다.
emp(empno)----------emp(mgr) #mgr: 해당 사원의 관리자의 empno를 의미
w m
SQL> select '직원: '||w.ename||', '||'직속상관: '||m.ename
2 from emp w,emp m
3 where w.mgr=m.empno;
'직원:'||W.ENAME||','||'직속상관:'||M.
--------------------------------------
직원: FORD, 직속상관: JONES
직원: SCOTT, 직속상관: JONES
...
ANSI JOIN( INNER, OUTER )
ANSI(미국표준연구소) SQL은 대부분의 사용 DBMS에서 표준 언어이다.
다른 DBMS와의 호환성을 위해 ANSI 조인을 사용하는 것이 좋다.
- inner join
select 필드명1,필드명2,...
from 테이블1 (inner) join 테이블2
on 테이블1.필드명1=테이블2.필드명2
where 조건절;
- outer join
select 필드명1,필드명2,...
from 테이블1 (left/right) outer join 테이블2
on 테이블1.필드명1=테이블2.필드명2
where 조건절;
- using 절 구문 사용 (두 테이블의 공통된 칼럼의 이름이 같아야한다)
select e.empno,e.ename,deptno,d.dname,d.loc
//테이블 별칭을 사용하면 필드명에도 꼭 적어줘야한다
//using절에 들어가는 공통 필드명은 별칭을 함께 적지 않는다
from emp e join dept d
using (deptno);
'DB(ORACLE)' 카테고리의 다른 글
| [Oracle]오라클 서브쿼리 / 다중행 서브쿼리 비교 연산자-IN, ANY, SOME, ALL, EXISTS (0) | 2021.06.13 |
|---|---|
| [Oracle]오라클 서브쿼리, 조건문 그룹함수 사용 (0) | 2021.06.12 |
| [Oracle]오라클 조인개념, cross join, inner join (0) | 2021.06.08 |
| [Oracle]데이터 타입, varchar2 char 차이점, 자료형 변경 (0) | 2021.05.31 |
| [Oracle]제약조건, Primary key, Foreign key, Unique, Check, 제약조건 삭제, 테이블 이름 변경 (0) | 2021.05.29 |