프로그래밍/SQL

SQL-12) JOIN 문법 -2 , ansi join : sqld, mysql, sql 자격증,DB 손해보험

LeeSeunghyuk 2020. 10. 29. 21:55
반응형

안녕하세요 이승혁입니다.

 

이번 포스팅은 JOIN 문법 2번째 포스팅 1999 ansi join 문법을 포스팅 하겠습니다.

 

※ 조인 2가지

 

1. 오라클 조인      :  현업에서 많이 사용해서 중요하다.

- equi 조인

- non eqi 조인

- oter joinself join

 

2. 1999 ansi 조인

- on 절을 사용한 조인 문법

- cross 조인

 

ㆍ 1999 ansi join - on 절을 사용한 조인 문법

 

예제 ) select ename, d.loc

  from emp e, dept d -> from emp e join dept d

  on ( e.deptno = d.deptno ) ;

  where d.loc ='DALLAS';

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

: 검색 조건을 where 절에 사용, 조인 조건은 따로 사용하는게 on 절의 목적

 

실습 1. 급여등급(grade)가 5등급인 사원들의 이름, 월급, 급여등급을 출력해보기

답 : select e.ename, e.sal , s.grade

from emp e join salgrade s

on (e.sal between s.losal and s.hisal);

where grade=5;

select e.ename, e.sal , s.grade
from emp e join salgrade s
on (e.sal between s.losal and s.hisal)
where grade=5;

 

실습 2. 직업이 SALESMAN, ANALYST인 사원들의 이름, 직업, 부서위치를 on 절 사용한 join 문법으로 구현해보기

답 : select e.ename, e.job, d.loc

from emp e join dept d

on (e.deptno = d.deptno)

where e.job = 'SALESMAN' or e.job='ANALYST';

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

ㆍ1999 ansi join - using 절을 사용한 조인

select e.ename, d.loc
from emp e join dept d   
using (deptno);

 

※ 설명 : 연결고리가 되는 컬럼명을 테이블 별칭 없이 괄호 안에 적어주면 된다.

 

실습 3. ansi join , using절 , 직업이 SALESMAN 인 사원들의 이름, 월급, 직업, 부서위치 using 절을 사용해 출력해보기

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

 ※ natural join

 

select e.ename, d.loc  
from emp e natural join dept d;

 

※ left/right/full outer join

 

예제 :        Oracle 조인 문법        vs         1999 ansi 조인 문법

      select e.ename, d.loc                  select e.ename, d.loc              

        from emp e, dept d                   from emp e right outer join dept d

        where e.deptno(+) = d.deptno;     on( e.deptno=d.deptno )

 

      select e.ename, d.loc                     select e.ename, d.loc              

        from emp e, dept d                   from emp e left outer join dept d

        where e.deptno= d.deptno(+) ;     on( e.deptno=d.deptno );

 

                                                    select e.ename, d.loc              

                 x                                     from emp e full outer join dept d

                                                        on( e.deptno=d.deptno );

 

실습 4. on 절 사용해보기, 직업 SALESMAN이고 월급이 1200이상인 사원들의 이름, 월급, 직업, 부서위치를 출력해보기 

select e.ename, e.sal, e.job, d.loc

from emp e join dept d

  on (e.deptno=d.deptno)

where e.sal >=1200 and e.job='SALESMAN';

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

 

※ cross 조인

 

equi join에 조인 조건이 없는 조인과 같습니다.

emp 14개 행 x dept 4개 행 = 56개 행 인출

select e.ename, d.loc  
from emp e, dept d; -- = from emp e cross join dept d;

cross join 방법
cross join 결과

 

이번 포스팅은 여기서 마치겠습니다. 

감사합니다.

 

SQLD 자격증 화이팅

반응형