반응형
*부속질의(subquery)란
- 하나의 SQL문 안에 다른 SQL문이 중첩된(nested) 질의를 말한다.
- 다른 테이블에서 가져온 데이터로 현재 테이블에 있는 정보를 찾거나 가공할 때 사용한다.
- 보통 데이터가 대량일 때 데이터를 모두 합쳐서 연산하는 조인보다 필요한 데이터만 찾아서 공급해주는 부속질의가 성능이 더 좋다.
- 주질의(main query, 외부질의)와 부속질의(sub query, 내부질의)로 구성된다.
*부속질의 종류
- 스칼라 부속질의 - SELECT 부속질의
- 인라인 뷰 -FROM 부속질의
- 중첩질의 - WHERE 부속질의
*스칼라 부속질의(SELECT 부속질의)
- SELECT절에서 사용되는 부속질의로, 부속질의의 결과 값을 단일 행, 단일 열의 스칼라 값으로 반환한다.
- 스칼라 부속질의는 원칙적으로 스칼라 값이 들어갈 수 있는 모든 곳에 사용 가능하며, 일반적으로 SELECT문과 UPDATE SET절에 사용된다.
- 주질의와 부속질의와의 관계는 상관/비상관 모두 가능하다.
*인라인 뷰(FROM 부속질의)
- FROM절에서 사용되는 부속질의이다.
- 테이블 이름 대신 인라인 뷰 부속질의를 사용하면 보통의 테이블과 같은 형태로 사용 가능하다.
- 부속질의 결과 반환되는 데이터는 다중 행, 다중 열이어도 상관없다. 다만 가상의 테이블인 뷰 형태로 제공되어 상관 부속질의로 사용될 수는 없다.
*중첩질의(WHERE 부속질의)
- 중첩질의는 WHERE절에서 사용되는 부속질의이다.
- WHERE절은 보통 데이터를 선택하는 조건 혹은 술어와 같이 사용된다.
- 중첩질의를 술어 부속질의라고도한다.
- 중첩질의 연산자의 종류
- IN, NOT IN
IN연산자는 주질의 속성 값이 부속질의에서 제공한 결과 집합에 있는지 확인하는 역할을 한다.
IN연산자는 부속질의의 결과 다중 행을 가질 수 있다. 주질의는 WHERE절에 사용되는 속성 값을 부속질의의
결과 집합과 비교해 하나라도 있으면 참이 된다. NOT IN은 이와 반대로 값이 존재하지 않으면 참이된다. - ALL, SOME(ANY)
ALL은 모두, SOME(ANY)은 어떠한(최소한 하나라도)이라는 의미를 가진다. - EXISTS, NOT EXISTS
데이터의 존재 유무를 확인하는 연산자이며 주질의에서 부속질의로 제공된 속성의 값을 가지고
부속질의에 조건을 만족하여 값이 존재하면 참이되고, 주질의는 해당 행의 데이터를 출력한다.
반응형
'데이터베이스' 카테고리의 다른 글
오라클 SQL / 뷰(VIEW) (0) | 2020.05.06 |
---|---|
오라클 SQL / ROWNUM (0) | 2020.05.06 |
오라클 SQL / 인덱스(INDEX) (0) | 2020.05.06 |
오라클 SQL / NULL (0) | 2020.05.06 |