4.4.1 SELECT文の指定形式および規則
表のデータを検索します。
- 〈この項の構成〉
(1) 指定形式
SELECT文::=〔SQLパラレル実行指定〕 問合せ式 〔ORDER BY句〕 〔LIMIT句〕 SQLパラレル実行指定::=/*>> SQL PARALLEL EXECUTION <<*/ ORDER BY句::=ORDER BY ソート指定リスト
SELECT文は,SQLパラレル実行指定,問合せ式,および句(ORDER BY句とLIMIT句)で構成されています。SELECT文の構成例を次の図に示します。
- 注
-
上記の例には,SQLパラレル実行指定は記載していません。
なお,SELECT文を使用した行の取り出し方法については,マニュアルHADB AP開発ガイドの次に示す個所を参照してください。
-
JDBCドライバを使用する場合:データを検索する場合(SELECT文を実行する場合)のデータの検索方法
-
CLI関数を使用する場合:CLI関数の使い方のデータを参照する場合
(2) 指定形式の説明
- ●SQLパラレル実行指定
-
SQLパラレル実行指定::=/*>> SQL PARALLEL EXECUTION <<*/
SQLパラレル実行機能を検索系SQLに適用する場合に,SQLパラレル実行指定を指定します。SQLパラレル実行機能については,マニュアルHADB システム構築・運用ガイドのSQLパラレル実行機能を参照してください。
ただし,SQLパラレル実行指定を指定しても,マニュアルHADB AP開発ガイドのSQLパラレル実行機能が適用される条件に記載されている条件をすべて満たさないと,検索系SQLにSQLパラレル実行機能は適用されません。
- ●問合せ式
-
問合せ式を指定します。問合せ式については,「7.1 問合せ式」を参照してください。
問合せ指定を指定するか,または問合せ指定によって導出される表の和集合を求めるために指定します。
- ●ORDER BY句
-
ORDER BY句::=ORDER BY ソート指定リスト
問合せ式の結果を昇順または降順に並べ替える場合に指定します。ORDER BY句を省略した場合,問合せ式の結果は昇順または降順に並びません。
ソート指定リストには,ソートキーおよびソート結果の並び順を指定します。ソート指定リストについては,「7.25 ソート指定リスト」を参照してください。
留意事項を次に示します。
-
ソートキーが文字データの場合,サーバ定義,クライアント定義,またはコネクション属性に指定した文字データの並び替え順序に従って,バイトコード順またはソートコード順に並び替えられます。
-
文字データをソートコード順に並び替える場合は,各文字に割り当てられた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文を実行する場合,次に示すすべての権限が必要になります。
-
CONNECT権限
-
SELECT文中のすべての問合せ指定中に指定する表に対するSELECT権限
(4) 規則
-
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]
[説明]
-
表(T1)を指定しているため,表の指定数は1となります。
-
結合表を指定しているため,表の指定数は,結合表に指定した表(T2とT3)の合計数の2となります。
-
導出表を指定しているため,表の指定数は,導出表の数が1,導出問合せに含まれる表(T4とT5)が2となり,合計3となります。
-
問合せ名を指定しているため,表の指定数は,問合せ名を等価変換した導出表の数が1,導出問合せに含まれる表(T6とT7)が2となり,合計3となります。
-
表関数導出表を指定しているため,表の指定数は1となります。
-
ビュー表を指定しているため,表の指定数は,ビュー表(V1)を等価変換した導出表の数が1,導出問合せに含まれる表(T8とT9)が2となり,合計3となります。
-
ビュー表を指定しているため,表の指定数は,ビュー表(V2)を等価変換した導出表の数が1,導出問合せに含まれるビュー表(V1)を等価変換した導出表の数が1,導出問合せに含まれる表(T8とT9)2となり,合計4となります。
-
アーカイブマルチチャンク表を指定しているため,アーカイブマルチチャンク表を等価変換した導出表の数が1,導出問合せに含まれる表が4となり,合計5となります。T001は,導出表に等価変換されるアーカイブマルチチャンク表とします。
-
集まり導出表(CDT1)を指定しているため,表の指定数は1となります。
上記の例の場合,SQL文中に指定されている表,導出表,表関数導出表,および集まり導出表の延べ数は23になります。
なお,V1,V2は,次に示すCREATE VIEW文で定義されたビュー表とします。
CREATE VIEW "V1" AS SELECT * FROM "T8","T9" CREATE VIEW "V2" AS SELECT * FROM "V1"
-
-
SELECT文中に指定している集合演算がすべてUNIONの場合,指定できる集合演算の数は最大1,023個になります。ただし,指定した集合演算にEXCEPTまたはINTERSECTがある場合は,指定できる集合演算の数は最大63個になります。
-
SELECT文中に指定できる外結合(FULL OUTER JOIN)の数は,最大63個になります。
-
問合せ式の結果,導出される列の名前を検索項目列名といいます。問合せ式の結果,導出される列の名前がない場合(列名長が0の場合),検索項目列名は次のように決まります。
EXPnnnn_NO_NAME
(凡例)nnnn:0001〜4000の符号なし整数
(例)
SELECT "C1",MAX("C2"),MIN("C2") FROM "T1" GROUP BY "C1"
上記のSELECT文を実行した場合,検索項目列名はC1,EXP0001_NO_NAME,EXP0002_NO_NAMEとなります。
-
アーカイブマルチチャンク表を検索する場合,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"
- 例題3
-
社員表(EMPLIST)から,社員の平均年齢(AGE)を部門(SCODE)ごとに求めます。このとき,SQLパラレル実行機能を適用します。
/*>> SQL PARALLEL EXECUTION <<*/ SELECT "SCODE",AVG("AGE") FROM "EMPLIST" GROUP BY "SCODE"
SELECT文の基本的な例題については,「1. SELECT文の例題集」にまとめて記載しています。そちらも参照してください。
ORDER BY句を指定したSELECT文の例については,「7.25.4 例題」の「(1) ORDER BY句にソート指定リストを指定した例」を参照してください。
LIMIT句を指定したSELECT文の例については,「7.9.1 LIMIT句の指定形式および規則」の「(4) 例題」を参照してください。