본문 바로가기
Programming/Database

[Database] 다중행 서브쿼리

by 코딩여걸 2021. 8. 20.
728x90

다중행 서브쿼리란?

  • 서브쿼리의 결과가 둘 이상일 경우 다중행 비교연산(in any all)
-- 다중행 서브쿼리
-- 연산자
-- IN : 목록에 있는 임의의 값과 동일하면 참
-- ANY : 서브쿼리에서 반환된 각각의 값과 비교하여 하나라도 참이면 참
-- < ANY : 최대값보다 작음
-- > ANY : 최소값보다 큼
-- = ANY : IN과 동일하다.
-- ALL : 서브쿼리에서 반환된 모든 값과 비교하여 모두 참이어야 한다.
-- < ALL : 최소값보다 작음
-- > ALL : 최대값보다 큼

예제1) 다음 문장의 결과를 확인하시오

select empno, ename, job, sal, deptno
from emp
where sal = (select MAX(sal)
             from emp
             GROUP BY deptno);
-- 위 문장에서 where절의 sal(800)은 1개 인데, 서브쿼리의 출력결과는 4개이다.
-- 따라서 오류가 발생한다.
select deptno, MAX(sal)
from emp
GROUP BY deptno;  -- 부서별 최대값
select * from emp;
-- 해결방안
select empno, ename, job, sal, deptno
from emp
where sal IN (select MAX(sal)
             from emp
             GROUP BY deptno);
-- sal값이 부서별 최대값과 1개라도 일치하면 참이기 때문에 출력해 준다.
select empno, ename, job, sal, deptno
from emp
where sal IN (2850, 1100, 3000, 5000);
728x90

'Programming > Database' 카테고리의 다른 글

[Database] 슈도컬럼(Pseudo-Column)  (0) 2021.08.20
[Database] 서브쿼리  (0) 2021.08.20

댓글