Hitachi

Hitachi Advanced Data Binder SQLリファレンス


4.4.1 SELECT文の指定形式および規則

表のデータを検索します。

〈この項の構成〉

(1) 指定形式

SELECT文::=問合せ式ORDER BY句〕 〔LIMIT句ORDER BY句::=ORDER BY ソート指定リスト

SELECT文は,問合せ式と句(ORDER BY句およびLIMIT句)で構成されています。SELECT文の構成例を次の図に示します。

図4‒1 SELECT文の構成例

[図データ]

なお,SELECT文を使用した行の取り出し方法については,マニュアルHADB AP開発ガイドの次に示す個所を参照してください。

(2) 指定形式の説明

問合せ式

問合せ式を指定します。問合せ式については,「7.1 問合せ式」を参照してください。

問合せ指定を指定するか,または問合せ指定によって導出される表の和集合を求めるために指定します。

ORDER BY句
ORDER BY句::=ORDER BY ソート指定リスト

問合せ式の結果を昇順または降順に並べ替える場合に指定します。ORDER BY句を省略した場合,問合せ式の結果は昇順または降順に並びません。

ソート指定リストには,ソートキーおよびソート結果の並び順を指定します。ソート指定リストについては,「7.24 ソート指定リスト」を参照してください。

留意事項を次に示します。

  • ソートキーが文字データの場合,サーバ定義,クライアント定義,またはコネクション属性に指定した文字データの並び替え順序に従って,バイトコード順またはソートコード順に並び替えられます。

  • 文字データをソートコード順に並び替える場合は,各文字に割り当てられたISO/IEC14651:2011規格のソートコード<S0000><S2FFFF>とサブコード<T0000><TFFFF>を使用して並び替えられます。ソートコードが割り当てられていない文字同士の並び替えは,バイトコード順に並び替えられます。

  • 文字データをソートコード順に並び替える場合は,Unicode(UTF-8)のビットパターンとして不正な文字は,1バイトの1文字として扱われ,いちばん後ろに並べられます。

  • ORDER BY句を指定した場合,作業表が作成されることがあります。作業表が作成される作業表用DBエリアの容量が正しく見積もられていない場合,性能低下の原因となることがあります。作業表用DBエリアの容量見積もりについては,マニュアルHADB システム構築・運用ガイドを参照してください。作業表の詳細については,マニュアルHADB AP開発ガイド作業表が作成されるSQLを実行する際の考慮点を参照してください。

LIMIT句

問合せ式の結果から取得する行数の最大値を指定します。

LIMIT句については,「7.9 LIMIT句」を参照してください。

(3) 実行時に必要な権限

SELECT文を実行する場合,次に示すすべての権限が必要になります。

(4) 規則

  1. SELECT文中の全表参照に指定できる表,導出表表関数導出表,および集まり導出表の延べ数は,最大2,048個になります。ただし,SQL文中に次の指定がある場合,次の指定が内部導出表に等価変換されたあとのSQL文に対して延べ数のチェックが行われます。

    • ビュー表

      CREATE VIEW文中にビュー表を指定している場合は,CREATE VIEW文中に指定したビュー表を導出表に等価変換したあとに,延べ数のチェックが行われます。

    • 問合せ名

    • アーカイブマルチチャンク表

    メモ

    アーカイブマルチチャンク表に関する等価変換については,マニュアルHADB AP開発ガイドアーカイブマルチチャンク表を検索するSQL文の等価変換を参照してください。

    SQL文中に指定した表,導出表表関数導出表,および集まり導出表の数え方の例を次に示します。

    (例)

    WITH "Q1" AS (SELECT * FROM "T6","T7")
    SELECT * FROM
      "T1",                                                ...[a]
      "T2" LEFT OUTER JOIN "T3" ON "T2"."C1"="T3"."C1",    ...[b]
      (SELECT * FROM "T4","T5") W1,                        ...[c]
      "Q1",                                                ...[d]
      TABLE(ADB_CSVREAD(MULTISET['/tmp/data.gz'],'COMPRESSION_FORMAT=GZIP;'))
      AS W2 ("C1" INTEGER),                                ...[e]
      "V1",                                                ...[f]
      "V2",                                                ...[g]
      "T001",                                              ...[h]
      UNNEST("T1"."C1") "CDT1"                             ...[i]

    [説明]

    1. 表(T1)を指定しているため,表の指定数は1となります。

    2. 結合表を指定しているため,表の指定数は,結合表に指定した表(T2T3)の合計数の2となります。

    3. 導出表を指定しているため,表の指定数は,導出表の数が1,導出問合せに含まれる表(T4T5)が2となり,合計3となります。

    4. 問合せ名を指定しているため,表の指定数は,問合せ名を等価変換した導出表の数が1,導出問合せに含まれる表(T6T7)が2となり,合計3となります。

    5. 表関数導出表を指定しているため,表の指定数は1となります。

    6. ビュー表を指定しているため,表の指定数は,ビュー表(V1)を等価変換した導出表の数が1,導出問合せに含まれる表(T8T9)が2となり,合計3となります。

    7. ビュー表を指定しているため,表の指定数は,ビュー表(V2)を等価変換した導出表の数が1,導出問合せに含まれるビュー表(V1)を等価変換した導出表の数が1,導出問合せに含まれる表(T8T9)2となり,合計4となります。

    8. アーカイブマルチチャンク表を指定しているため,アーカイブマルチチャンク表を等価変換した導出表の数が1,導出問合せに含まれる表が4となり,合計5となります。T001は,導出表に等価変換されるアーカイブマルチチャンク表とします。

    9. 集まり導出表(CDT1)を指定しているため,表の指定数は1となります。

    上記の例の場合,SQL文中に指定されている表,導出表表関数導出表,および集まり導出表の延べ数は23になります。

    なお,V1V2は,次に示すCREATE VIEW文で定義されたビュー表とします。

    CREATE VIEW "V1" AS SELECT * FROM "T8","T9"
    CREATE VIEW "V2" AS SELECT * FROM "V1"
  2. SELECT文中に指定している集合演算がすべてUNIONの場合,指定できる集合演算の数は最大1,023個になります。ただし,指定した集合演算にEXCEPTまたはINTERSECTがある場合は,指定できる集合演算の数は最大63個になります。

  3. SELECT文中に指定できる外結合(FULL OUTER JOIN)の数は,最大63個になります。

  4. 問合せ式の結果,導出される列の名前を検索項目列名といいます。問合せ式の結果,導出される列の名前がない場合(列名長が0の場合),検索項目列名は次のように決まります。

    EXPnnnn_NO_NAME

    (凡例)nnnn00011000の符号なし整数

    (例)

    SELECT "C1",MAX("C2"),MIN("C2")
        FROM "T1" GROUP BY "C1"

    上記のSELECT文を実行した場合,検索項目列名はC1EXP0001_NO_NAMEEXP0002_NO_NAMEとなります。

  5. アーカイブマルチチャンク表を検索する場合,SELECT文中の探索条件の指定に注意する必要があります。詳細については,マニュアルHADB AP開発ガイドアーカイブマルチチャンク表を検索する際の考慮点を参照してください。アーカイブマルチチャンク表を検索するSELECT文を指定する場合は,必ず参照してください。

(5) 例題

例題1

販売履歴表(SALESLIST)から,2013/9/6以降に商品コードP002の商品を購入した顧客の,顧客ID(USERID),商品コード(PUR-CODE),購入日(PUR-DATE)を検索します。

SELECT "USERID","PUR-CODE","PUR-DATE"
    FROM "SALESLIST"
        WHERE "PUR-DATE">=DATE'2013-09-06'
        AND "PUR-CODE"='P002'
例題2

社員表(EMPLIST)から,社員の平均年齢(AGE)を部門(SCODE)ごとに求めます。

SELECT "SCODE",AVG("AGE")
    FROM "EMPLIST"
        GROUP BY "SCODE"

SELECT文の基本的な例題については,「1. SELECT文の例題集」にまとめて記載しています。そちらも参照してください。

ORDER BY句を指定したSELECT文の例については,「7.24.4 例題」の「(1) ORDER BY句にソート指定リストを指定した例」を参照してください。

LIMIT句を指定したSELECT文の例については,「7.9.1 LIMIT句の指定形式および規則」の「(4) 例題」を参照してください。