본문 바로가기

Oracle/SQL

SQL ANSI /ISO STANDARD JOIN - ON 절 이용

ORACLE 조인과 다르게 ANSI 조인은 WHERE 절에 조인문법을 쓰는게 아닌

FROM ~ 테이블1 join 테이블2 ON (테이블1 조인조건문 테이블 2 동일컬럼)

                       join 테이블 3 on ( 테이블 1 조인조건문 테이블 3 )절을 사용하여 조인한다.

-> ON 절을 쓸때에는 반드시 (괄호) 안에 입력한다.

이름, 직업, 월급 부서위치 출력

select e.ename, e.job, e.sal, d.loc
from emp e join dept d 
on (e.deptno = d.deptno );

1999 ansi 문법의 on 절을 사용한 조인문법

오라클 조인문법 과 다른 점은 from 절에 (,) 대신 join 을 쓰고

where 절에 조인조건을 쓰는게 아닌 on 절에 조인조건을 작성하고, where 절에는 검색조건만 입력한다.


문제 직업이 세일즈맨 사원들의 이름,직업,월급,부서위치 출력 on 절 이용 하여 출력

select e.ename, e.job, e.sal, d.loc 
from emp e join dept d
on (e.deptno = d.deptno)
where job = 'SALESMAN';

문제  TABLE emp, dept, salgrade 를 조인하여 ename, sal, loc, grade 를 출력 하시오 

(해당 쿼리는 oracle join 문법이다.) 

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

문제  위의 oracle join  결과를 ansi join 문법으로  출력

* oracle join 과는 다르게 하나씩 조인하고 on 절 쓴뒤 첫번재 table 을 기준으로 또 join 후 on 절로 조건문 입력해준다.  join ~ on~ , join ~ on ~ .. 이런식

select e.ename, e.sal, d.loc, s.grade
from emp e join dept e 
             on (e.deptno = d.deptno)
           join salgrade s
             on (e.sal between s.losal and s.hisal)

문제 위의결과에서 월급이 2500 이상 출력

select e.ename, e.sal , d.loc, s.grade
from emp e join detp d
           on (e.deptno = d.deptno)
           join salgrade s 
           on (e.sal between s.losal and s.hisal)
where e.sal >= 2500;

-> 조인후 마지막  where 절에 검색 조건을 주었다. 

문제 311 on 절을 이용한 조인문법사용하여 부서위치,부서위치별 토탈월급 출력

select d.loc, sum(e.sal)
from emp e join dept d 
      on (e.deptno = d.deptno)
group by d.loc;

문제 312 부서위치별 토탈월급과, 맨아래에 총 토탈월급 출력 되도록 하시오

group by 절에 d.loc 별 토탈월급이 출력되는데 맨아래에 총 토탈월급이 출력되려면 rollup 집계함수를 사용해준다. 

 

select d.loc, sum(e.sal)
from emp e join dept d 
on (e.deptno = d.deptno)
group by rollup(d.loc);

문제 313 달라스에서 근무하는 사원들 이름,부서위치 출력

select e.ename, d.loc
from emp e join dept d
   on (e.deptno = d.deptno)
where d.loc = 'DALLAS';