FROM 절은 질의에서 데이터를 조회하고자 하는 테이블을 지정한다. 조회할 수 있는 경로는 다음과 같다.
• 개별 테이블
• 부질의
• 유도 테이블
FROM from_specification
from_specification
:
table_spec [ {, table_spec | outerjoin_table_spec
}...]
table_spec
:
single_table_spec [ correlation ] [ WITH
(lock_hint [ {, lock_hint }_ ] ) ]
( single _table_spec [ {, single_table_spec}...] )
CLASS table_name [ correlation ]
subquery correlation
TABLE (expression) correlation
outerjoin_table_spec
:
{ LEFT | RIGHT } [OUTER
] JOIN table_spec ON search_condition
single_table_spec
:
[ ONLY ] table_name
ALL table_name [ ( EXCEPT table_spec
) ]
correlation
:
[ AS ] identifier
lock_hint
:
READ UNCOMMITTED
질의문에서
FROM 절의 테이블
명세 부분에
부질의가 사용될
수 있다. 이런 형태의 부질의는 부질의 결과가 테이블로 취급되는
유도 테이블(derived table)을
만든다.
유도 테이블을
만드는 부질의가
사용될 때
반드시 상관 명세가 사용되어야 한다.
또한 유도 테이블은
집합 값을
갖는 속성의
개별 원소를
접근하는데 사용된다. 이 경우 집합 값의 한 원소는 유도 테이블에서 하나의
인스턴스로 생성된다.
유도 테이블의 각 인스턴스는 FROM 절에 주어진 부질의의 결과로부터 만들어진다.
FROM (subquery) [ AS ] derived_table_name [( column_name [ {, column_name }_ ] )]
부질의로부터 생성되는 유도 테이블은 임의의 개수의 컬럼과 인스턴스를 가질 수 있다.
단, column_name 파라미터의 개수와 subquery에서 만들어지는 컬럼의 개수는 일치해야 한다.
SELECT
SUM(n) FROM (SELECT gold FROM participant WHERE nation_code='KOR'
UNION ALL SELECT
silver FROM participant WHERE nation_code='JPN') AS t(n);
===
<Result of SELECT Command in Line 2> ===
sum(n)
========
82
1
rows selected.
SELECT
nation_code, host_year, gold
FROM participant
p
WHERE gold
> ( SELECT AVG(s)
FROM
( SELECT silver + bronze
FROM
participant
WHERE
nation_code = p.nation_code
AND
silver > 0
AND
bronze > 0
)
AS t(s));
=== <Result
of SELECT Command in Line 1> ===
nation_code
host_year
gold
=========================================
'JPN'
2004
16
'CHN'
2004
32
'DEN'
1996
4
'ESP'
1992
13
4
rows selected.