繰返し列を要素ごとに分割し,それぞれを別の行として検索できます。
また,複数の繰返し列の添字が等しい要素同士を,同じ行として検索できます。これを,繰返し列の平坦化機能といいます。
SELECT 〔ALL|DISTINCT〕{選択式〔,選択式〕 …|*} |
選択式,FLAT,及び探索条件以外のオペランドについては,「2.2.1 問合せ式 形式1(一般問合せ式)」を参照してください。
検索結果として出力する項目を指定します。
選択式については,「2.3 問合せ指定」を参照してください。
平坦化の対象となる繰返し列又は,繰返し列を含む列の並びを指定します。
複数の繰返し列を指定した場合は,添字が等しい要素が同じ行に含まれるように平坦化されます。
通常の列(繰返し構造でない列)も含む場合は,繰返し列のどの要素に対しても同じ値を持つ行が生成されます。
繰返し列,又は繰返し列を含む列の組を平坦化した後は,通常の列になります。したがって,その問合せ式中では通常の列として指定します。
探索条件中には,平坦化した後の項目を指定できます。
探索条件については,「2.7 探索条件」を参照してください。
列名に指定した列とインデクスの関係 | SQL文 実行可否 | |||
---|---|---|---|---|
インデクス定義あり | 繰返し列を含むインデクスがある | FLATの列名に指定した列のうち,SQL中に指定した列をすべて包括したインデクスがある | FLATの列名中に一つでも繰返し列が存在する | ○ |
FLATの列名中に一つも繰返し列が存在しない | × | |||
FLATの列名に指定した列のうち,SQL中に指定した列をすべて包括したインデクスがない | × | |||
繰返し列を含むインデクスがない | × | |||
インデクス定義なし | × |
SELECT 氏名,科目名,成績 FROM 成績表 (FLAT(氏名,科目名,成績))
WHERE 成績>=70
表定義:
CREATE TABLE 成績表(氏名 MCHAR(10),
科目名 MCHAR(10) ARRAY[4],
成績 SMALLINT ARRAY[4]);
インデクス定義:
CREATE INDEX 科目成績 ON 成績表(氏名,科目名,成績);