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 |
댓글