FROM절 서브 쿼리
- 서브 쿼리는 FROM절에서도 사용 가능하다.
- 해당 SELECT문에서만 사용 가능한 데이터를 정의한다.
- FROM절에 기술한 서브 쿼리는 마치 뷰와 같은 역할을 한다.
- FROM절에 있는 서브 쿼리는 인라인뷰 라고도 한다.
- ex)
1
2
3
4
5
6
7
|
SELECT
ename,
sal
FROM (SELECT ename,sal
FROM emp
ORDER BY sal DESC)
WHERE rownum < 6;
|
스칼라 서브 쿼리
- 서브 쿼리 수행 결과가 한 개 ROW와 한 개 컬럼만을 반환하는 경우
- 반환 값이 단일 값이 되는 서브 쿼리이다.
- 단일 값을 사용할 수 있는 모든 곳에 사용이 가능하다.
- SELECT, ORDER BY 위치에는 스칼라 서브쿼리만 사용이 가능하다
- ex)
1
2
3
4
5
6
7
8
9
|
SELECT
ename,
sal,
deptno,
(SELECT
dname
FROM dept
WHERE deptno = 20) RESULT
FROM emp;
|
상호 연관 서브 쿼리
- 메인 쿼리의 한 ROW에 대해서 서브 쿼리가 한 번씩 실행된다.
- 테이블에서 행을 먼저 읽고 각 ROW의 값을 서브 쿼리 실행 시 이용한다.
- 기본 질의에서 고려된 각 후보 행에 대해 서브쿼리가 다른 결과를 반환해야 하는 경우에 사용된다.
- 서브 쿼리에서 메인 쿼리의 컬럼명을 사용할 수 있으나 메인 쿼리에서는 서브 쿼리의 컬럼명을 사용할 수 없다.
- ex)
1
2
3
4
5
6
7
8
9
|
SELECT
ename,
sal,
deptno,
(SELECT
dname
FROM dept
WHERE deptno = E.DEPTNO) RESULT
FROM emp E;
|
EXISTS
- 메인 쿼리에서 검색된 값이 서브 쿼리의 결과 집합에 존재하는지 여부를 검사하기 위한 상호 연관 서브 쿼리에 자주 사용된다.
- 서브 쿼리가 하나의 행 이상 반환하면 True를 반환하고 해당 값이 없으면 False를 반환한다.
- ex) 부서원이 있는 부서의 번호, 부서 이름 조회
1
2
3
4
5
6
7
|
SELECT
deptno,
dname
FROM dept D
WHERE EXISTS (SELECT 1
FROM emp
WHERE deptno = D.DEPTNO);
|
오늘의 한 줄 : SELECT는 거의 다 쓰네?
출처 : SK 동반성장 아카데미, 비전공자를 위한 SQL 입문, 「인라인뷰와 스칼라 서브쿼리」
'공부 > SQL' 카테고리의 다른 글
[SQL] 오브젝트 이해 (0) | 2019.12.05 |
---|---|
[SQL] INSERT ˙ UPDATE ˙ DELETE 구문 사용 (0) | 2019.12.05 |
[SQL] 서브 쿼리 (0) | 2019.12.04 |
[SQL] 조인 문장 및 집합 연산자 (0) | 2019.12.04 |
[SQL] 조인 처리과정 이해 및 기본 조인 문장 (0) | 2019.12.03 |