C#,Delphi,Oracle,MSSQL 개발자블로그
[Oracle/기본]6. 서브쿼리(Subquery) 본문
- 서브쿼리를 작성할 수 있는 부분
1. WHERE 절
2. HAVING 절
3. FROM 절
서브쿼리 = 중첩SELECT = 부속 SELECT = 내부SELECT
- 서브쿼리는 괄호로 둘러싸야 한다.
- 서브쿼리는 비교연산자의 오른쪽에 있어야 한다.
- 서브쿼리에 ORDER BY 절을 포함하면 안된다. (SELECT문장에 대해서는 오직 하나의 ORDER BY를 가질 수 있으며,
SELECT문장의 제일 마지막에 있어야 한다.)
● 서브쿼리의 유형
1. 단일 행 서브쿼리 : 내부 SELECT 문장으로부터, 오직 하나의 행만을 리턴하는 질의이다.
단일 행 비교연산자(비교대상이 1개의 결과 리턴)를 사용한다.
=, >, >=, <, <=, <>
Ex. SELECT ename, job
FROM emp
WHERE job = (SELECT job
FROM emp
WHERE empno = 7369)
AND sal > (SELECT sal
FROM emp
WHERE empno = 7876);
2. 다중 행 서브쿼리 : 내부 SELECT 문장으로부터, 하나 이상의 행을 리턴하는 질의이다.
다중 행 비교연산자(비교대상이 1개 이상의 결과 리턴)를 사용한다.
IN, ANY, ALL
Ex. < IN 연산자 사용 >
SELECT ename, sal, deptno
FROM emp
WHERE sal IN (SELECT MIN(sal)
FROM emp
GROUP BY deptno); ☞ 부서에 대해서 최소 급여를 받는 종업원들을 찾는다.
Ex. < ANY 연산자 사용 >
SELECT ename, sal
FROM emp
WHERE sal > ANY (SELECT sal
FROM emp
WHERE deptno = 30) ☞ 30번 부서에서 급여가 가장낮은사람보다
은 급여를 받는 사원의 이름, 급여 출력한다.
★ <ANY : 최대값보다 적음을 의미
>ANY : 최소값보다 많음을 의미
=ANY : IN과 같다.
Ex. < ALL 연산자 사용 >
SELECT ename, sal
FROM emp
WHERE sal > ALL (SELECT sal
FROM emp
WHERE deptno = 30) ☞ 30번 부서에서 급여가 가장높은사람
보다 많은 급여를 받는 사원의 이름, 급여 출력한다.
★ <ALL : 최소값보다 적음을 의미
>ALL : 최대값보다 많음을 의미
3. 다중 열 서브쿼리 : 내부 SELECT 문장으로부터, 하나 이상의 열을 리턴하는 질의 이다.
CLERK 7900
MANAER 7698
'Programming > Oracle 공부' 카테고리의 다른 글
[Oracle/기본]9. 데이터 조작 (0) | 2017.05.23 |
---|---|
[Oracle/기본]7. 다중 열 서브쿼리(Subquery) (0) | 2017.05.23 |
[Oracle/기본]5. 그룹 함수를 사용한 데이터 집계 (2) | 2017.05.22 |
[Oracle/기본]4. 다중 테이블로부터 데이터 디스플레이 (0) | 2017.05.22 |
[Oracle/기본]3. 단일 행 함수 (0) | 2017.05.19 |