SELECT ステートメントは照会の 1 形式です。
呼び出し
このステートメントは、アプリケーション・プログラム内で DB2 CLI 関数を用いて使用することができます。 また、CLP を介して出すこともできます。
構文
.-,------------. V | >>-SELECT--+----------+----| 選択項目 |-+--FROM-----------------> '-DISTINCT-' .-,------------------------. V | >----表名--+----------------+-+--+---------------------+--------> '-+----+--相関名-' '-WHERE--| 検索条件 |-' '-AS-' >--+---------------------------------+--------------------------> | .-,-----------------. | | V | | '-GROUP BY----+---------+--列名-+-' '-表名--.-' >--+---------------------------------------------------+--------> | .-,--------. | | V | | '-ORDER BY--+---単純整数-+------------------------+-' | .-,-------------------------------. | | V | | '---+---------+--列名--+----------+-+-' '-表名--.-' '-+-ASC--+-' '-DESC-' >--+-----------------+----------------------------------------->< '-LIMIT--単純整数-' 選択項目: |--+-*------------------------+---------------------------------| +-COUNT--(--+-| 式 |-+--)--+ | '-*------' | +-AVG--(----| 式 |----)----+ +-SUM--(----| 式 |----)----+ +-MIN--(----| 式 |----)----+ +-MAX--(----| 式 |----)----+ +-MOD--(-| 式 |-,-| 式 |-)-+ +-LENGTH--(--| 式 |--)-----+ +-RTRIM--(--| 式 |--)------+ +-LCASE--(--| 式 |--)------+ '-UCASE--(--| 式 |--)------' 検索条件: .----------------------------------------. V | |----+------------------------------------+-+-------------------| '-+-AND-+--+-----+--+-| 述部 |-----+-' '-OR--' '-NOT-' '-| 検索条件 |-' 述部: (1) |--+-| 基本述部 |--+--------------------------------------------| +-| IN 述部 |---+ +-| LIKE 述部 |-+ '-| NULL 述部 |-' 基本述部: |--| 式 |--+-=---+--| 式 |--------------------------------------| +- <>-+ +- <--+ +->---+ +- <=-+ +- >=-+ '-||--' IN 述部: .-,------. V | |--| 式 |--+-----+--IN----| 式 |-+------------------------------| '-NOT-' LIKE 述部: |--| 式 |--+-----+--LIKE--| 式 |--------------------------------| '-NOT-' NULL 述部: |--| 式 |--IS--+-----+--NULL------------------------------------| '-NOT-' 式: .-演算子------------------------. V | |----+----+--+-リテラル----------+-+----------------------------| +- +-+ +-+---------+--列名-+ '- --' | '-表名--.-' | +-特殊レジスター----+ '-関数--------------' 演算子: |--+- /-+-------------------------------------------------------| +- *-+ +- +-+ '- --'
注:
説明
CHAR、VARCHAR、BLOB(n)、DATE、TIME および TIMESTAMP データ・タイプに対する算術演算はサポートされません。
1 番目、2 番目の引き数は SMALLINT または INTEGER のいずれかです。
両方の引き数が SMALLINT であれば、結果は SMALLINT であり、それ以外の場合は、 INTEGER となります。結果がヌルになる場合があります。つまり、 引き数がヌルであれば、結果はヌル値になります。
この関数の結果はストリングです。 その長さは、2 つの引き数の長さの合計です。 引き数がヌル値もとる場合は、結果がヌルになることがあります。つまり、 引き数がヌルであれば、結果はヌル値になります。
LENGTH(式) 関数は、値の長さを戻します。
引き数は式にもなり、以下の組み込まれたデータ・タイプの値を戻します。
この関数の結果は整数です。引き数がヌル値もとる場合は、結果がヌルになることがあります。つまり、 引き数がヌルであれば、結果はヌル値になります。
結果は、引き数の長さです。可変長ストリングの長さは実際の長さで、最大長ではありません。
BLOB の長さは、値を表すために使用したバイトの数です。
ADDRESS という列名の VARCHAR(50) の列に、「895 Don Mills Road」という値が入っているとします。LENGTH(ADDRESS) は 18 という値を戻します。
RTRIM(式) 関数は、ストリングの終わりからブランクを除去します。
引き数は、CHAR または VARCHAR のデータ・タイプにすることができます。
この機能の結果データ・タイプは常に VARCHAR となります。
戻されたタイプの長さパラメーターは、引き数データ・タイプの長さパラメーターと同じになります。
文字ストリングの結果の実際の長さは、ストリング式から、 ブランク文字として除去したバイト数を引いた長さです。 漢字ストリングの結果の実際の長さは、ストリング式から除去したブランク文字 (2 バイト) を引いた長さ (2 バイト文字) です。すべての文字が除去されると、結果は空になり、可変長ストリング (長さはゼロ) となります。
引き数がヌル値もとる場合は、結果がヌルになることがあります。つまり、 引き数がヌルであれば、結果はヌル値になります。
NAME という列名の CHAR(50) の列に、「Cliff」という値が入っていると します。RTRIM(NAME) は「Cliff」を戻します。LENGTH(RTRIM(NAME)) は 5 を戻します。
LCASE 関数または LOWER 関数は、SBCS 文字がすべて小文字に変換されたストリングを戻します。つまり、文字 A から Z が文字 a から z に変換され、発音区別符号が付いた文字があれば、それらは同等の小文字に変換されます。
引き数は、値のデータ・タイプが CHAR か VARCHAR である式でなくてはなりません。
上記の関数の結果は、引き数と同じデータ・タイプと長さの属性を持つことになります。引き数がヌル値もとる場合は、結果がヌルになることがあります。つまり、 引き数がヌルであれば、結果はヌル値になります。
EMPLOYEE 表の列 JOB の値に含まれる文字は小文字で戻されることを確認してください。例えば、次のようにします。
SELECT LCASE(JOB) FROM EMPLOYEE WHERE EMPNO = '000020';
1 つの表参照を指定した場合、中間結果表は単純にその表参照の結果です。 2 つ以上の表参照を指定した場合、中間結果表は、指定した表参照の行の可能な 組み合わせすべて (カルテシアン積) で構成されます。結果の各行は、最初の表参照 からの行を 2 番目の表参照からの行と連結したもの、さらに、2 番目の行は 3 番目 の表参照からの行と連結した行になります。以下同様です。 結果における行数は、各表参照における行数の積となります。 FROM 文節には、最大 20 まで表を指定できます。
検索条件 の結果は、指定した各述部の結果に対して、指定した 論理演算子 (AND、OR、NOT) を適用することによって得られます。 述部は 2 つの値を比較します。論理演算子を指定しなければ、 検索条件の結果は、指定した述部の結果となります。
括弧内の検索条件が先に評価されます。評価の順序を括弧で指定していない場合、NOT が AND の前に 適用され、AND が OR の前に適用されます。同じ順序レベルの演算子が評価される順序は、検索条件の最適化が できるように未定義となっています。
表の各行に検索条件 が適用され、検索条件 の 結果が真となった行が選択されます。
検索条件の中の各列名 は、表の列を示すものでなければなりません。
CHAR、VARCHAR、BLOB(n)、DATE、TIME および TIMESTAMP データ・タイプに対する算術演算はサポートされません。
例:
SELECT lname, fname FROM emp WHERE state IN ('CA', 'AZ', 'OR');
SELECT c1 FROM t1 WHERE c1*5-6 IN (mod(c2,2)+5,c3+4/2);
例:
SELECT empid FROM emp WHERE city NOT IN ('San Jose', 'Morgan Hill', 'Santa Clara');
規則
GROUP BY、ORDER BY、および DISTINCT 文節で BLOB データ・タイプ列を使用することはできません。
注意事項
SELECT EMPNO, FIRSTNAME FROM EMPLOYEE ORDER BY LASTNAME次の照会は有効です。
SELECT LASTNAME, EMPNO, FIRSTNAME FROM EMPLOYEE ORDER BY LASTNAME
例
例 1: EMPLOYEE 表から 01/01/1980 以降に雇用された 従業員 (EMPNO および LASTNAME) を選択し、ラストネーム (LASTNAME) の順に並べます。
SELECT EMPNO, LASTNAME FROM EMPLOYEE WHERE HIREDATE > '01/01/1980' ORDER BY LASTNAME
例 2: EMPLOYEE 表の部門ごとに平均給与を計算します。
SELECT DEPT, AVG(SALARY) FROM EMPLOYEE GROUP BY DEPT
例 3: 各販売地域ごとに最大販売量を計算し、 販売量の多い方から少ない方へと順に、地域別に結果を表示します。
SELECT REGION, MAX(SALES_VOL) FROM SALES GROUP BY REGION ORDER BY 2 DESC
関連した解説