5.3 Nested subqueries

select 속성 from 테이블 where 조건

질의문은 이러한 큰 문장구조를 가지고 있는데 이중에서 테이블이 오는 곳이라면 어디든 질의문이 들어갈 수 있다. 보통은 from 이나 where 조건절에 나온다.

Select name
from professor
where salary = (select salary from professor where pID='10') and pID <> '10';
-- 서브질의에서 하나의 터플만 반환하기 때문에 **등호**를 사용할 수 있다.
-- 이렇게 하나만 반환하는 것을 single-row subquery 를 scalar subquery 라고 한다.

IN operator

: 주어진 여러개의 값들 중에 속해 있으면 true

Select name, salary
from professor
where pID IN (10, 21, 22);

Select count(distinct sID) from takes
where (cID, semester, year) 
IN (select cID, semester, year from teaches where pID = 10);
-- 여러개의 속성을 동시에 비교하는 것도 가능하다.

Comparison operator

: 하나의 값을 여러 값들과 비교하는 것은 쉽지않다. 그래서 all, some, any 연산자를 통해 연산한다.

Correlated subqueries (상관 중첩질의)

: 지금까지는 subquery(외부) 에 나오는 from 절의 속성이 내부 속성과 상관이 없어서 개별적으로 이해된다.

correlated subquery는 내부에서 외부 query 의 touple 을 기준으로 내부 중첩질의를 실행한다.

Exists

: subquery의 결과가 존재하면 true

Select S.cID
from teaches as S
where S.semester = 'Fail' and S.year= 2009 and 
exists (select * 
				from teaches as T 
					where T.semester = 'Fail' and T.year= 2010 and S.cID = T.cID);

For All (모든 ~ 에 대하여)

: 연산자를 제공해주지는 않는다. ‘X - Y = ∅’ 을 이용해서 나타낸다.