2.3.1 問合せ指定の形式と規則
(1) 機能
表に対する検索の条件(表式),及び検索した結果を出力する項目(選択式)を指定することで,選択式を列とする検索結果で構成された表を導き出します。この導き出された表のことを導出表といいます。
(2) 使用権限
表に対するSELECT権限を持つユーザが,その表を検索する問合せ指定を実行できます。
(4) オペランド
-
〔{ALL|DISTINCT}〕
検索した結果,重複した行(選択式で指定した項目で一つの行を構成し,その行が同一のもの)があった場合,重複した行を排除するかどうかを指定します。
-
{選択式〔,選択式〕…|*}
検索結果として出力する項目を指定します。
- 選択式
-
選択式として次に示すものが指定できます。
-
列指定
-
〔表指定.〕ROW
-
集合関数
-
ウィンドウ関数
-
スカラ関数※
-
CASE式
-
CAST指定
-
定数
-
USER値関数
-
CURRENT_DATE値関数
-
CURRENT_TIME値関数
-
CURRENT_TIMESTAMP値関数
-
SQL変数又はSQLパラメタ
-
値式※ 〔〔AS〕列名〕
-
表指定.*
-
コンポネント指定
-
関数呼出し※
-
WRITE指定
-
GET_JAVA_STORED_ROUTINE_SOURCE指定
-
スカラ副問合せ
- 注※
-
関数呼出しの引数には,?パラメタ,及び埋込み変数を指定できます。指定方法については,「規則」を参照してください。
スカラ関数のLENGTH,SUBSTR及びPOSITIONの引数には,?パラメタ及び埋込み変数を指定できます。指定方法についてはそれぞれの関数の規則を参照してください。
選択式についての規則を次に示します。
-
-
スカラ関数LENGTH,SUBSTR,及びPOSITIONの引数には,?パラメタ及び埋込み変数を指定できます。ただし,LENGTHの引数,SUBSTRの第1引数,POSITIONの第1引数,及び第2引数にはデータ型がBLOB型又はBINARY型,かつAS データ型を指定した場合だけ指定できます。
-
選択式中には結果のデータ型が次に示すデータ型の値式は指定できません。
-
BOOLEAN
-
-
カーソル宣言,動的SELECT文,1行SELECT文,FROM句の導出表,及び述語中の副問合せの選択式中には,結果のデータ型が抽象データ型の値式は指定できません。
-
SELECT DISTINCTを指定した場合,選択式中又は表式中では,DISTINCT指定の集合関数は指定できません。
-
選択式に繰返し列を指定した場合,次の指定はできません。
-
SELECT DISTINCT
-
その問合せに対するUNION 〔ALL〕
-
その問合せに対するEXCEPT 〔ALL〕
-
-
〔表指定.〕ROWは,FIX属性の実表に対してだけ指定できます。ROWは行全体(予備列を含む)を意味し,これを指定することで行全体を一つのデータとして一つの領域に取り出します。取り出されるデータのデータ型は,各列のデータ型にかかわらずROW型(ROW型に対しては,CHAR(n)(nは行長)に対応する変数,又は構造体を指定できます。ただし,構造体中に境界調整による空きがあってはいけません)とします。また,データ長は行長(各列のデータ長の総和)になります。表に予備列が定義してある場合は,取り出した領域中の予備列に対応する部分は予備列に格納されているデータ(予備列の定義長分の0x00)になります。選択式中にROWを指定した場合,その問合せ指定に対する次のものと同時に指定できません。
-
集合関数
-
GROUP BY句
-
UNION〔ALL〕,又はEXCEPT〔ALL〕
-
-
〔表指定.〕ROWは,既定文字集合以外の文字データ型の列を含む表には指定できません。
-
ROW型を使用する場合は,UAPが動作するプラットフォームとHiRDBサーバが動作するプラットフォームのエンディアンを同じにしてください。異なるエンディアン間では,ROW型は使用できません。例えば,WindowsのUAPでROW型を使用する場合は,HiRDBサーバも同じエンディアンのWindows版を使用してください。
-
〔表指定.〕ROWは,結合表の内表に対して指定できません。
-
SELECT句に指定する列は,その表式のFROM句で指定した表を参照してください。
-
表式中に集合関数,GROUP BY句,又はHAVING句を指定した場合,SELECT句の列指定は次のどちらかにしてください。
-
グループ化列(GROUP BY句で指定した値式)
-
集合関数の引数中で指定
-
-
次のデータ型のSQL変数又はSQLパラメタを選択式に指定した場合,そのSELECT句を直接含む問合せ指定,及びそのSELECT句を含む問合せには,次の機能又は句は指定できません。
<SQL変数又はSQLパラメタのデータ型>
-
BLOB
-
定義長が32,001バイト以上のBINARY
-
BOOLEAN
-
抽象データ型
<問合せ指定中に同時に指定できない機能又は句>
-
集合関数
-
GROUP BY句
-
HAVING句
-
DISTINCT
-
ビュー定義中の導出問合せ式で,上記の機能,句を指定したビュー表を,FROM句に指定
<問合せ中に同時に指定できない機能又は句>
-
集合演算
-
ORDER BY句
-
FOR UPDATE句
-
FOR READ ONLY
-
-
表指定.*を指定した場合,指定した表のすべての列(予備列を除く)を表定義時に指定した順序で指定することを意味します。
-
AS 列名は,選択式に対して名称を付ける場合に指定します。
-
n番目の選択式にAS 列名を指定した場合,その列名は選択式を指定した問合せ指定によって導出される表のn番目の列名になります。
-
n番目の選択式にAS 列名を指定しない場合,選択式に指定した列名が問合せ指定によって導出される表のn番目の列名になります。ただし,選択式が列指定だけでない場合,n番目の列は名前のない列になります。
-
n番目の選択式にスカラ副問合せを指定した場合,問合せ指定によって導出されるn番目の列名は,スカラ副問合せの問合せ指定によって導出される列名になります。ただし,AS 列名を指定している場合は,AS列名で指定した列名になります。また,スカラ副問合せの問合せ指定によって導出される列が名前のない列の場合,問合せ指定によって導出されるn番目の列は,名前のない列になります。
-
WRITE指定は,選択式に単独で指定できます。
-
GET_JAVA_STORED_ROUTINE_SOURCE指定は次の箇所で指定できます。
-
最も外側の問合せ指定の選択式に単独で指定
-
最も外側の問合せ指定の選択式の,スカラ関数LENGTHの引数に指定
-
-
DISTINCTを指定した場合,WRITE指定及びGET_JAVA_STORED_ROUTINE_SOURCE指定は指定できません。
-
INSERT文の問合せ指定の選択式には,WRITE指定及びGET_JAVA_STORED_ROUTINE_SOURCE指定は指定できません。
-
表式中に列指定以外の値式を指定したGROUP BY句を指定した場合,
選択式に指定したスカラ副問合せ中からそのグループ化列を参照することはできません。
-
選択式にウィンドウ関数を指定する場合,ウィンドウ関数以外の選択式を一つ以上指定してください。
-
スカラ演算中にウィンドウ関数は指定できません。
ウィンドウ関数を指定した場合,選択式に集合関数を指定できません。
-
選択式中には,予備列,及び予備列を指定した値式は指定できません。
- *
-
表のすべての列を出力する場合,指定します。
*は,その問合せ指定のFROM句で指定したすべての表の,すべての列(予備列を除く)を,FROM句で指定した表の順序で指定することを意味します。各表中の列の順序は,表定義時に指定した順序になります。
-
表式
表式については,「表式」を参照してください。
なお,ビュー定義文中の導出問合せ式の制限項目については,「CREATE 〔PUBLIC〕VIEW(ビュー定義,パブリックビュー定義)」を参照してください。
(5) 規則
-
最も外側の問合せ指定の選択式に,次に示す属性の値式を指定して導出した,名前付きの導出表に対する問合せ指定では,内部導出表を作成する問合せは指定できません。内部導出表を作成する条件については,「内部導出表」を参照してください。
-
BLOB
-
最大長が32,001バイト以上のBINARY
-
抽象データ型
-
繰返し列
-
-
関数呼出しの引数に?パラメタ,又は埋込み変数を指定する場合,引数は次の形式で指定してください。
-
? AS データ型
-
:埋込み変数〔:標識変数〕 AS データ型
-
(6) 留意事項
-
行単位(ROW指定)の検索,又は更新をする場合,ROWに対する埋込み変数,SQL変数,又はSQLパラメタ中の日付データ型の部分は4バイトです。また,形式はX'YYYYMMDD'にしてください。
行単位(ROW指定)インタフェースを使用して,日付データを文字表現で受け渡しする場合,列は日付データ型ではなく,CHAR(10)で定義してください。さらに,日付演算は,スカラ関数DATEを使用し,日付データ型に変換してから指定してください。
-
行単位(ROW指定)の検索,又は更新をする場合,ROWに対する埋込み変数,SQL変数,又はSQLパラメタ中の時刻データ型の部分は3バイトです。また,形式はX'hhmmss'にしてください。行単位(ROW指定)インタフェースを使用して,時刻データを文字表現で受け渡しする場合,列は時刻データ型ではなく,CHAR(8)で定義してください。さらに,時刻演算は,スカラ関数TIMEを使用し,時刻データ型に変換してから指定してください。
-
行単位(ROW指定)の検索,又は更新をする場合,ROWに対する埋込み変数,SQL変数,又はSQLパラメタ中の時刻印データ型の部分は(7+(p÷2))バイトです。また,形式はX'YYYYMMDDhhmmss〔nn…n〕'にしてください。行単位(ROW指定)インタフェースを使用して,時刻印データを文字表現で受け渡しする場合,列は時刻印データ型ではなく,長さが19,22,24,又は26バイトのCHARで定義してください。
-
次のどちらかの条件を満たす場合,HiRDBが作業表を作成することがあります。
-
DISTINCTを指定している
-
選択式中に集合関数を含む値式を指定している
-
選択式中にウィンドウ関数を含む値式を指定している
このとき,作業表の行長によっては,上記の処理が制限されることがあります。作業表の行長については,マニュアル「HiRDB システム導入・設計ガイド」を参照してください。
-