본문 바로가기

Oracle

Oracle sqlplus select JOIN

select 실행 순서

1. from 테이블명

2. where 조건절

3. group by 칼럼명

4. having 조건절

5. select 칼럼명1, 칼럼명2, ...

6. order by 칼럼명 [asc/desc] > 오름차순 혹은 내림차순

 

※ 계정 파일은 oraclexe\app\oracle\product\10.2.0\server\RDBMS\ADMIN 폴더안에 있는 scott.sql 파일을 활용함.

예제 table

테이블 column 설명

- empno 사원번호

- ename 사원이름

- job 직책

- mgr 매니저의 사원번호

- hiredate 입사일

- sal 봉급

- comm 성과급

- deptno 부서번호

 

dept 예제 table

- deptno 부서번호

- dname 부서명

- loc 장소

 

 

JOIN

- 하나의 테이블로 원하는 칼럼정보를 참조할수 없는 경우 관련된 테이블을 논리적으로

결합하여 원하는 칼럼 정보를 참조하는 방법을 JOIN 이라고 한다.

[기본형식]

- select 칼럼명1, 칼럼명2... from 테이블명1, 테이블명2... where join 조건 and 다른 조건...

 

 

- EMP 테이블의 모든 사원들의 이름, 부서번호, 부서명을 출력해 보세요.

- select ename, emp.deptno, dname from emp, dept where emp.deptno=dept.deptno;

 

- 급여가 3000 에서 5000 사이의 사원이름과 부서명을 출력해보시오.

- select ename, dname from emp, dept where emp.deptno = dept.deptno and sal between 3000 and 5000;

 

- 부서명이 'ACCOUNTING' 인 사원의 이름, 입사일, 부서번호, 부서명을 출력해보시오

- select ename, emp.deptno, dname, hiredate from emp, dept where emp.deptno=dept.deptno and dname='ACCOUNTING'; 

 

- 부서명이 'ACCOUNTING' 인 사원의 이름, 입사일, 부서번호, 부서명을 출력해보시오.

- select ename, deptno, dname, hiredate from emp inner join dept using(deptno) where dname='ACCOUNTING';

 

- 커미션이 NULL이 아닌 사원의 이름, 입사일, 부서명을 출력해보시오.

- select ename, hiredate, dname from emp, dept where emp.deptno=dept.deptno and comm is not NULL;

 

 

2. SELF 조인

- 참조해야할 칼럼이 자신의 테이블에 있는 경우에 사용하는 JOIN 방법

 

- 각 사원의 이름과 매니저의 이름을 출력하세요.

- select e1.ename, e2.ename from emp e1, emp e2 where e1.mgr = e2.empno;

 

 

3. OUTER JOIN 

- 한쪽 테이블에 해당하는 데이터가 존재하는데 다른 테이블에는 데이터가 존재하지 않을때에도

모든 데이터를 추출하도록 하는 JOIN 방법

 

- 사원번호, 부서번호, 부서명을 출력하세요 (단 사원이 근무하지 않는 부서명도 같이 출력해보시오)

- select dept.deptno, emp.empno, dept.dname from emp, dept where emp.deptno(+)=dept.deptno;

- select d.deptno, e.empno, d.dname from emp e, dept d where e.deptno(+)=d.deptno; → 줄임표현

 

예제)

 

- emp 테이블과 dept 테이블을 조인하여 부서번호,부서명,이름,급여 를 출력해 보세요!

- select e.deptno, d.dname, e.ename, e.sal from emp e, dept d where e.deptno = d.deptno; 

 

- 사원의 이름이 'ALLEN' 인 사원의 부서명을 출력해보세요

- select e.ename, d.dname from emp e, dept d where e.deptno = d.deptno and e.ename = 'ALLEN' ; 

 

- 모든 사원의 이름, 부서번호, 부서명, 급여를 출력하세요. 단, emp 테이블에 없는 부서도 출력해보세요

>select e.ename, e.deptno, d.dname, e.sal from emp e, dept d where e.deptno(+) = d.deptno ;

 

- 다음과 같이 모든 사원의 매니저를 출력해보세요

- select e1.ename || ' 의 매니저는 ' || e2.ename || ' 입니다' from emp e1,emp e2 where e1.mgr = e2.empno ; 

 

- 사원의 이름과 급여, 급여의 등급을 출력해 보세요

- select ename, sal, grade from emp, salgrade where sal between losal and hisal; 

 

- 사원의 이름과, 부서명, 급여의 등급을 출력해 보세요

- select e.ename, d.dname, s.grade from emp e, dept d, salgrade s where e.deptno = d.deptno and e.sal between s.losal and s.hisal;