본문 바로가기

Oracle/SQL

SQL Sub Query 다중컬럼 서브쿼리

다중컬럼 서브쿼리의 종류

  1. non pair wise 방식
  2. pair wise 방식

1. non pair wise 방식

예제 : 부서번호가 30 번인 사원들과, 월급도 같고, 커미션도 같은 사원들의 이름과 월급과 커미션과 부서번호를 출력 하시오

select ename, sal, comm, deptno 
from emp 
where sal in (select sal 
              from emp ———————> 월급이 같은 컬럼 1
              where deptno = 30 ) 
 and comm in ( select comm 
               from emp ————> 커미션도 같은 컬럼 2
               where deptno =30);

 

위와 같이 여러개의 컬럼 (ename, sal, comm, deptno ) 대한값이 서브쿼리에서 메인쿼리로 리턴이 되면 다중컬럼 서브쿼리문 입니다.


2.pair wise 방식

select ename, sal, comm, deptno 
from emp 
where (sal, comm) in (select sal, comm 
                      from emp
                      where deptno =30);

출력해보면 1 번과 2 번의 차이점은 정렬이 좀 다르다.

non pair wise 의 방식과 pair wise 의 방식이 출력하는 결과는 서로 다르다.

  1. non pair wise : 부서번호 30번인 사원들 중에, 월급중에 하나와 커미션중에 하나라도  같으면 무조건 출력
  2. pair wise : 부서번호 30번인 사원의 그 월급과 그 커미션을 받는 사원들이어야지만 출력이된다.

EX)

  1. pair wise
    sal  comm
    1250 1400
    1250 500
    1600 300
    1500 0
       

-> pair wise 는 딱 네가지 경우만 가능하다 1250 에 1400 이런식으로

  1. non pair wise
    sal  comm
    1250 1400
    1250 500
    1250 300
    1250 0
       

-> 출력되는 값이 많다.

데이터를 분석하고자 하는 질문을 정확하게 파악하여서, 거기에 맞는 쿼리문을 작성해야한다.

문제 357 직업이 세일즈맨인 사원들과 월급이 같고

                   부서번호가 같은 사원들의 이름,월급,부서번호를 출력 (pair wise )

select ename, sal , deptno
from emp 
where (sal, deptno) in (select sal, deptno 
                        from emp 
                        where job = 'SALESMAN');