정의
SELECT 문장의 절에 포함된 SELECT 문장.
WHERE 절의 Sub Query : 비교 대상의 값이 미지정일 경우 사용됨
FROM 절의 Sub Query : Sub Query의 결과 집합(Result Set)을 하나의 View로 간주, 인라인뷰라고도 함
HAVING절의 Sub Query : 그룹함수의 결과에서 조건을 주어 조건에 맞는 결과를 표시할 때
유형
단일행 서브쿼리 : 서브쿼리의 결과로 하나의 행이 리턴된다.(=로 비교가능)
다중행 서브쿼리 : 서브쿼리의 결과로 하나 이상의 행이 리턴된다.(in연산자)
다중열 서브쿼리 : 서브쿼리의 결과로 하나 이상의 열이 리턴된다.
사용지침
1. WHERE절, HAVING절, FROM절에 Sub Query 사용
2. 서브쿼리는 ()로 둘러싸여져야 함
3. 단일행 서브쿼리는 단일행 연산자 사용, 다중행 서브쿼리는 다중행 연산자 사용
질문> JONES보다 급여를 많이 받는 사원은?
SELECT EMPNO, ENAME, SAL FROM EMP
WHERE SAL > (SELECT SAL FROM EMP WHERE ENAME = 'JONES') : 비교대상의 값이 미정일 경우
PAIRWISE Column 비교 : 여러 개의 컬럼을 하나로 묶어 결과가 같은 경우
NONPAIRWISE Column 비교 : 서브쿼리의 결과. 메인쿼리의 결과는 아니다.
FROM절 서브쿼리 = inlineView라고도 함
FROM절 뒤에는 하나의 집합으로 가져온다라고 이해하기.
질문> 급여를 많이 받는 사원 순으로 앞에 랭킹을 붙여서 조회하시오
rownum : order by 하기 전에 이미 정의됨. 인라인뷰에서 정렬을 먼저하고 그 결과 집합에서 데이터를 가지고 오고 ROWNUM을 정의한다.
SELECT ROWNUM, EMPNO, ENAME, SAL FROM
(
SELECT EMPNO, ENAME, SAL FROM EMP ORDER BY SAL DESC
)
질문> 급여를 많이 받는 사원 순으로 6위부터 10위까지 앞에 랭킹을 붙여서 조회하시오.
SELECT RANKING, EMPNO, ENAME, SAL
FROM (SELECT ROWNUM RANKING, EMPNO, ENAME, SAL
FROM (SELECT EMPNO, ENAME, SAL FROM EMP ORDER BY SAL DESC)
)
WHERE RANKING BETWEEN 6 AND 10
'IT 지식 > DB' 카테고리의 다른 글
[SQL]Join (0) | 2025.04.12 |
---|---|
[SQL] Oracle (0) | 2016.03.18 |
[SQL]ROWID (0) | 2016.03.09 |
[SQL] Procedure, Function, Package (0) | 2016.01.07 |
[펌]PK 가 없는 테이블에서 중복된 데이터 제거하기 (0) | 2015.12.18 |