단순 하위 쿼리
- 하위 쿼리(subquery)란 다른 명령문 (SELECT, INSERT, UPDATE, DELETE)에 포함된 SELECT문이며, 단순 하위 쿼리란 상관 하위 쿼리가 아닌 하위 쿼리를 가리킨다.
- 하위 쿼리에 대해 유의할 사항은 다음과 같다.
- 복잡한 쿼리를 일련의 논리적 절차로 분리하거나 다른 쿼리의 결과에 의존하는 쿼리를 만들 때 사용한다.
- 하위 쿼리는 반드시 ( ) 로 둘러싸야 한다.
- 하위 쿼리가 단일 값이나 값 목록을 돌려줄 경우, 이를 연산식이 오는 곳에 사용할 수 있다. 또한 하위 쿼리를 테이블이 오는 곳에 사용할 수도 있다.
- 특수한 데이터 형식 (T-SQL의 text/image)의 여릉ㄹ 추출하는 하위 쿼리는 만들 수 없다.
라인 3의 하위 쿼리는 (SELECT AVG ~~~) SalesLT.SalesOrderDetail 테이블의 UnitPriceDiscount의 평균값을 단일 값으로 돌려주고, 라인 2의 UnitPriceDiscount 열 값에서
하위 쿼리로 추출한 평균값을 뺀 값을 결과 집합헤 포함시킨다.
==============================================================================================================================================
라인 3의 하위 쿼리를 테이블 대신 사용한다. 이 때 별칭 ('AS a')이 생략되면 오류가 발생한다.
상관 하위 쿼리
- 상관 하위 쿼리란 외부 쿼리와 하위 쿼리가 상호 연관된, 복잡한 형태의 쿼리다.
- 쿼리 중에서 가장 난해한 쿼리이다.
라인 3에서 외부 쿼리의 테이블 SalesLT.SalesOrderDetail의 별칭을 a로 정하고, 라인 5에서 하위 쿼리의 테이블 SalesLT.OrderDetail 별칭을 b로 정한다.
그리고 하위 쿼리에서 라인 4의 끝부분처럼 외부 테이블의 SalesOrderID 열 값과 내부 테이블의 SalesOrderID 열 값을 비교 연산자로 서로 비교하여 관계를 맺는다.
하위 쿼리에서는 외부 쿼리가 보이지만 외부 쿼리에서는 하위 쿼리가 보이지 않으므로, 내/외부 테이블 열 값들 사이외 관계는 반드시 하위 쿼리에서 맺어 주어야 한다.
EXISTS / NON EXISTS
- 하위 쿼리와 함께 사용되는 특수한 연산자, 해당 하위 쿼리가 한 행이라도 결과 집합을 돌려주는지를 판단 할 때 사용된다.
- 사용 구문은 다음과 같다.
WHERE [ NOT ] EXISTS ( subquery )
위의 쿼리문은 한 번이라도 주문을 받은 제품들의 목록만 조회하는 쿼리다. 라인 4의 하위 쿼리가 한 행이라도 결과 집합을 돌려주면(orders 테이블에 존재하는 product_id 이면)
EXISTS 연산자가 성공하고, 이 product_id를 가진 product 테이블의 행은 최종적인 결과 집합에 포함된다.
위의 쿼리문은 NOT EXISTS를 사용하여 한 번도 주문을 받지 못한 제품들의 목록을 조회하는 쿼리문이다.
'Study > 데이터 베이스' 카테고리의 다른 글
[DBMS 강의 - 10] 함수 (0) | 2014.04.27 |
---|---|
[DBMS 강의 - 09] 유니온 (0) | 2014.04.22 |
[DBMS 강의 - 07] 테이블 조회_3 (0) | 2014.03.11 |
[DBMS 강의 - 06] 테이블 조회_2 (0) | 2014.03.08 |
[DBMS 강의 - 05] 테이블 조회_1 (0) | 2014.03.04 |