여러 개의 컬럼값을 반환하는 다중컬럼 서브쿼리의 작성 방식은 Pair wise와 Non pair wise로 구분할 수 있다.
두 가지 방식에 대해서
Oracle에서는 모두 지원하고 있으며, Mssql에서는 non pair wise만 지원하고 있다.
1. Non pair wise
반환하고자 하는 여러 개의 컬럼에 대해 각각 서브쿼리문을 작성
select ename, age, telecom
from emp15
where age in (select age from emp15 where ename like '이%')
and telecom in (select telecom from emp15 where ename like '이%');
2. pair wise
반환하고자 하는 여러 개의 컬럼값을 묶음으로 서브쿼리문 작성
select ename, age, telecom
from emp15
where (age, telecom) in(select age, telecom
from emp15
where ename like '이%');
※ non pair wise 방식보다는 pair wise 방식이 코딩이 더 짧아서 더 선호되는 SQL로 보이나,
pair wise 방식과 non pair wise 방식이 출력되는 결과가 서로 다르기에 비교될 수 없다.
아래의 예시를 통해 차이를 확인하자
(예시) 아래의 emp 테이블 활용하여,
부서번호가 30번인 사원들과 월급이 같고 커미션이 같은 사원들의 이름과 월급과 커미션과 부서번호를 출력하시오
1. Non pair wise 방식
select ename, sal, comm, deptno
from emp
where sal in (select sal
from emp
where deptno = 30)
and comm in (select comm
from emp
where deptno = 30);
- KING이 출력됨
- Non pair wise에서는 sal과 comm 각각이 주어진 조건 내에 있기만 하면 return됨.
- 가능한 (sal, comm) 조합
- 가능한 sal : 1250, 1600, 1500
- 가능한 comm : 1400,300,0,500
- 총 12가지 조합 가능
2.Pair wise 방식
select ename, sal, comm, deptno
from emp
where (sal, comm) in (select sal, comm
from emp
where deptno = 30);
- KING 이 출력되지 않음
- sal, comm이 짝지어져 정확히 일치하는 경우 (총 4가지) 만 출력
위와 같이 pair wise와 non pair wise는 동일 테이블에 대해 서로 다른 접근 방식으로 수행된다.
'Skill > Oracle' 카테고리의 다른 글
오라클 비밀번호 만료 시 재설정 및 기한 무제한으로 변경 (0) | 2023.03.02 |
---|---|
오라클 에러 정보(ORA-40104) (0) | 2022.06.13 |
Roll Up 함수 결과 예측하기 (0) | 2022.05.30 |
오라클 선형회귀함수 (0) | 2022.05.26 |
Oracle 초급 : ROW-COLUMN 전환 (0) | 2022.05.24 |