Digking's cave

다중행 서브 쿼리 본문

기초/Oracle

다중행 서브 쿼리

디깅 2019. 4. 24. 16:40
728x90

--1)주제 : 다중행 서브 쿼리
--        서브 쿼리에서 여러 행이 검색되는 것
--        연산자를 제외하면 단일행 서브쿼리와 동일
--2)용법 
--SELECT [DISTINCT|ALL] 컬럼, 컬럼...
--FROM 테이블
--WHERE 컬럼 <다중 행 연산자> (SELECT 문장 : Sub Query)
--
--a) 서브 쿼리에 여러 개의 행이 검색되는 쿼리문을 다중 행 서브 쿼리라고 한다.
--b) 다중 행 서브 쿼리는 다중 행 연산자를 이용한다
--c) 다중 행 연산자의 종류
--   IN : 검색된 값 중에 하나만 일치하면 참이다
--   ANY : 검색된 값 중에 조건에 맞는 것이 1개 이상이면 참이다
--   ALL : 모든 검색된 값과 조건에 맞아야 참이다


--20번 부서원들과 동일한 관리자로부터 관리 받는 사원을 검색
1) 20번 부서원들의 관리자 번호를 검색
SELECT mgr
FROM emp
WHERE dno = '20';

2) 검색된 관리자 번호와 동일한 관리자인 사원을 검색 
SELECT eno, ename, mgr, dno
FROM emp
WHERE mgr IN('0202' , '1002');

3)결과를 합친다
SELECT eno, ename, mgr, dno
FROM emp
WHERE mgr IN(SELECT mgr
             FROM emp
             WHERE dno = '20');
             
--10번 부서원들보다 급여가 낮은 사원을 검색하세요
1)01번 부서원들의 급여를 검색
SELECT sal
FROM emp
WHERE dno = '01';

2)검색된 급여들보다 낮은 사원 검색
SELECT eno, ename, dno, sal
FROM emp
WHERE sal < 3510
AND dno != '01';

3)합친다
SELECT eno, ename, dno, sal
FROM emp
WHERE sal < ALL(SELECT sal
            FROM emp
            WHERE dno = '01')
ORDER BY sal;

SELECT *
FROM emp
WHERE sal <(SELECT MIN(sal)
              FROM emp
              WHERE dno = '01')
ORDER BY sal;

--다중 행 연산자와 그룹 함수
--*다중 행 연산자인 ALL이나 ANY는 다음과 같이 그룹함수를 이용해서 표현할 수 있다.
--a) 컬럼 > ALL -> 컬럼 > MAX : 가장 큰 값보다 크다
--b) 컬럼 < ALL -> 컬럼 < MIN : 가장 작은 값보다 작다
--c) 컬럼 > ANY -> 컬럼 > MIN : 가장 작은 값보다 크다
--d) 컬럼 < ANY -> 컬럼 < MAX : 가장 큰 값보다 작다

20번 부서원들과 보너스가 같은 사원을 검색한다.
1)20번 부서원들의 보너스 검색
SELECT eno, ename, comm
FROM emp
WHERE comm IN(SELECT NVL(comm,0)
              FROM emp
              WHERE dno = '20')
AND dno != '20';

반응형

'기초 > Oracle' 카테고리의 다른 글

DML 문장  (0) 2019.04.24
다중 열 서브 쿼리  (0) 2019.04.24
서브 쿼리  (0) 2019.04.24
함수 - 5.그룹함수와 HAVING절  (0) 2019.04.24
함수 - 4.그룹함수  (0) 2019.04.24