본문 바로가기

Oracle/SQL

SQL Oracle Join - NON Equi join 여러 테이블 조인 (컬럼간 연결고리 = X)

조인하려는 테이블들 사이의 연결 조건이 = (이퀄) 이 아닌경우엔

BETWEEN AND 나 연산자 를 이용하여 Non equi join 을 한다. 

예제 :

select e.ename,e.sal, s.grade
from emp e, salgrade s
where e.sal between s.losal and s.hisal;

같은 퀄럼이 있다면 equi join 을 쓰면 되는데 위의 컬럼은 같은 컬럼이 없다.

where 절에 쓰인 조인 문법을 해석해 보자면

e.sal 에 있는 월급이 s.grade 에 있는 s.losal 과 s.hisal 사이에 존재한다!


문제 290 : 직업이 SALESMAN 인 사원들의이름, 월급과 급여 등급(GRADE) 를 출력하시오

select e.ename, e.sal, s.grade 
from emp e, salgrade s 
where e.sal between s.losal and s.hisal —————→ 조인조건
     and e.job = 'SALESMAN'; —————→ 검색조건

문제 293 급여등급, 급여등급별 속한 사원들의 이름을 가로로출력, 가로로출력할때 이름은 abc 순으로

select s.grade, listagg(e.ename,',') within group (order by e.ename )as EMLPOYEE
from emp e, salgrade s 
where e.sal between s.losal and s.hisal ———————> non equi join 문법
group by s.grade;
  • [ ] 조인문장을 작성할 떄에는 꼭 2개의 테이블만 작성해야하는가?
  • 답: 3개든 4개든 얼마든지 여러개의 테이블을 조인해서 각각의 컬럼들을 하나의 결과로 볼 수 있다.

예) DEPT ——————EMP ————————-SALGRADE

              연결고리               연결고리 

연결고리 = 조인조건

문제 294 : 이름, 월급, 급여등급(grade), 부서위치 (loc) 출력

세개 이상의 테이블을 조인하는법

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

문제 295 : 위 문제에서 급여등급이 2등급인 사원들만 출력

select e.ename, e.sal, s.grade, d.loc 
from emp e, salgrade s, dept d
where d.deptno = d.deptno ———————→ 조인조건 
          and e.sal between s.losal and s.hisal ———→조인조건
     and s.grade = 2; ————————————> 검색조건

문제 296 : 부서위치가 시카고 이고, 직업이 세일즈맨인사원들 이름, 월급 , 직업, 부서위치 출력

select e.ename, e.sal, e.job, d.loc 
from emp e, dept d
where e.deptno = d.deptno —————→조인조건
   and d.loc = 'CHICAGO' —————→검색조건 
   and e.job = 'SALESMAN'; —————>검색조건