Oracle DBA/SQL

추가 : 서브쿼리 사용하기 3 (다중열 서브쿼리) + unpair, pairwise

Nuez 2023. 7. 4. 16:56
반응형

* 서브 쿼리의 종류 3가지

 

1. 단일행 서브쿼리 : 서브쿼리에서 메인 쿼리로 하나의 값이 리턴되는 경우
2. 다중행 서브쿼리 : 서브쿼리에서 메인 쿼리로 여러 개의 값이 리턴되는 경우
3. 다중열(컬럼) 서브쿼리 : 서브쿼리에서 메인쿼리로 여러 개의 컬럼 값이 리턴되는 경우


문제 378. 직업이 SALESMAN인 사원들과 월급이 같은 사원들의 이름, 월급, 커미션, 직업을 출력하시오.

SELECT ename, sal, comm, job
FROM emp
WHERE sal IN (SELECT sal FROM emp WHERE JOB = 'SALESMAN');


문제 379. 직업이 SALESMAN인 사원들과 월급이 같고, 커미션도 같은 사원들의 이름, 월급, 커미션, 직업을 출력하시오. 

 

1. Non pair wise 방식 (oracle, mysql 등 통용)

SELECT ename, sal, comm, job
FROM emp
WHERE sal IN (SELECT sal FROM emp WHERE JOB = 'SALESMAN')
	AND comm IN (SELECT comm FROM emp WHERE JOB = 'SALESMAN');

 

2. pair wise 방식 (oracle, mysql 가능)

SELECT ename, sal, comm, job
FROM emp
WHERE (sal, comm) in (SELECT sal, comm FROM emp WHERE JOB = 'SALESMAN');

 

출력되는 정렬만 다르지 데이터는 똑같이 출력되고 있음.

하지만 이 2개는 데이터를 검색하는 방법이 서로 다름. 


방법이 다르다는 것을 알아보기 위해 데이터 하나 업데이트 

UPDATE emp SET sal = 1500 WHERE ename = 'KING';
UPDATE emp SET comm = 1400 WHERE ename = 'KING';

COMMIT;

1. Non pair wise 방식

 

2. pair wise 방식

 

설명 :

Non pair wise 방식이 데이터를 더 많이 불러옴. 

 

Non pair wise  Pair wise
sal comm sal comm
1250 500 1250 500
1250 1400 1250 1400
1500 0 1500 0
1600 300 1600 300
1250 0    
1250 300    
1500 300    
1500 500    
1500 1400    
1600 0    
1600 500    
1600 1400    

* 진한 검정색 값: 직업이 SALESMAN인 사원들의 sal, comm 값

 

* non pair wise : 조건에 해당하는 값들의 조합을 다 조회함. (salesman이 아닌 데이터도 조회됨, 파란색 값)

* pair wise : 조건에 해당하는 값만 조회함. 

 

어느 것이 더 좋다는 것이 아니라, 질문 의도에 맞춰서 작성해야 함.