본문 바로가기
oracle/[SQL] SQL

11장. Sub Query (서브쿼리)

by #moonyz 2014. 10. 13.

- 쿼리 안에 또 다른 쿼리

- 우선 서브 쿼리가 먼저 수행한 후 결과 값을 메인 쿼리로 전달 해주면 그 값을 받아서 메인 쿼리가 수행 됨

( 단, 모든 쿼리에서 서브쿼리가 먼저 수행되는 것은 아님)



[ 서브쿼리 작성시 주의사항 ]

- 서브쿼리 부분은 WHERE 절에 연산자 오른쪽에 위치해야 한다.

- 반드시 괄호로 묶어야 한다.

- 특별한 경우를 제외하고는 서브쿼리절에 order by 절이 올수 없다.

- 단일행 서브쿼리와 다중행 서브쿼리에 따라 연산자를 잘 선택해야한다.




1. 서브쿼리의 종류

(1) 단일행 서브쿼리

- 서브쿼리의 결과가 1개만 출력

- 단일행 서브쿼리에서 사용되는 연산자

 =

 같다

<> 

 같지않다 

 >

 크다

 >=

 크거나 같다

 <

 작다

 <=

 작거나 같다












(2) 다중행 서브쿼리

- 서브쿼리의 결과가 2개 이상 출력되는것

- 다중행 서브쿼리에서 사용되는 연산자

 IN

 같은 값을 찾음 

 EXISTS 

 서브쿼리의 값이 있을 경우 메인쿼리 수행함 

 >ANY 

 최소값을 반환함 

 <ANY 

 최대값을 반환함

 <ALL 

 최소값을 반환함 

 >ALL 

 최대값을 반환함


# 예제1 : IN 



# 예제2 : EXISTS




# 예제3 : ANY



# 예제4 : ALL










(3) 다중컬럼 서브쿼리

- 서브쿼리의 결과가 여러 컬럼인 경우

- 주로 primary key 를 여러 컬럼으로 합쳐서 만들었을 경우 한꺼번에 비교하기 위해서 자주사용.








(4) 상호연관 서브쿼리

- 메인쿼리값을 서브쿼리에 주고 서브쿼리를 수행한 후 그 결과를 다시 메인쿼리로 반환해서 수행하는 쿼리

- 잘 못 사용될 경우 성능 저하의 원인이 될수 있음 (INLINE View 등 권장)

# 예제




2. Scalar Sub Query (스칼라 서브쿼리)

- SELECT 절에 오는 서브쿼리

- 결과를 1행씩 반환

- OUTER JOIN과 동일

- 데이터 양이 적은 경우에 많이 사용 (JOIN은 데이터양이 많은 경우)


# 서브쿼리의 위치에 따라서 이름이 바뀜

SELECT [서브쿼리] --스칼라 서브쿼리(1행만 반환할 경우)

FROM [서브쿼리] -- INLINE VIEW (인라인뷰)

WHERE [서브쿼리] --서브쿼리





3. WITH 절을 사용한 서브쿼리

- 원하는 테이블을 메모리에 미리 뷰처럼 가상의 테이블로 생성시킨후 데이터를 가져오는 기법

- 성능이 좋아서 많이 사용되지만 사용법이 어렵다.

- 쿼리가 수행되기 전에 미리 메모리에서 만들어 둔 테이블에서 데이터를 찾아서 작업하기 때문에 성능 good

- 똑같은 테이블을 조회하는 쿼리가 계속 들어갈 경우 한번만 기술하고 반복해서 불러쓰기 때문에 good


- with 절 안에는 select 문장만 사용가능

- with 절 안에 또 다른 with 절 사용 불가능



'oracle > [SQL] SQL' 카테고리의 다른 글

13장. 계층형 쿼리 (Hierarchical Query)  (0) 2014.10.14
12장. SEQUENCE(시퀀스) / SYNONYM(동의어)  (0) 2014.10.14
10장. VIEW  (1) 2014.10.07
9장. 인덱스(Index)  (1) 2014.10.07
8장. 제약조건  (0) 2014.10.06

댓글