SQL 概説

関数の使用

ここでは、このマニュアルの例の中で使う関数について簡単に説明します。 データベース関数 とは、 入力データ値と結果値の間の関係付けです。

関数には、組み込み 関数と ユーザー定義 関数があります。 DB2 ユニバーサル・データベースには、たくさんの組み込み関数と、 事前インストール済みユーザー定義関数が付属しています。

組み込み関数は SYSIBM スキーマの中にあり、 事前インストール済みユーザー定義関数は SYSFUN スキーマの中にあります。 SYSIBM と SYSFUN は予約スキーマです。

組み込み関数と事前インストール済みユーザー定義関数だけですべてのユーザー要件を満たすことは到底できません。 したがって、アプリケーション開発者は、 開発するアプリケーションに特化した関数のセットを作成することが必要になる場合があります。 これは、ユーザー定義関数によって可能になります。 ユーザー定義関数を活用するなら、 DB2 ユニバーサル・データベースの適用範囲を拡張して、 カスタマイズされた業務用関数または科学計算用関数を含めることができます。 これについては、ユーザー定義関数を参照してください。

列関数

列関数 は、 1 つの列の一群の値から単一の結果値を計算します。 列関数の例としては、下記のものがあります。 これらは列関数のほんの一部分です。 完全なリストについては、 SQL 解説書 を参照してください。

AVG
ある集合内の値の和を、その集合内の値の数で割った結果を戻します。

COUNT
行または値の集合内の行数または値数を戻します。

MAX
値の集合の中の最大値を戻します。

MIN
値の集合の中の最小値を戻します。

次のステートメントでは、STAFF 表から給与の最大値を選択しています。

     SELECT MAX(SALARY)
        FROM STAFF

このステートメントは、STAFF サンプル表から 22959.20 の値を戻します。

次の例では、収入が平均収入より多く、 就業年数が平均就業年数より短い従業員の名前と給与を選択しています。

     SELECT NAME, SALARY
        FROM STAFF
        WHERE SALARY > (SELECT AVG(SALARY) FROM STAFF)
        AND YEARS < (SELECT AVG(YEARS) FROM STAFF)

このステートメントの結果は、次のとおりです。

      NAME      SALARY   
     --------- ---------
     Marenghi   17506.75
     Daniels    19260.25
     Gonzales   16858.20

この例の WHERE 文節では、 列関数が直接的な書き方 (例: WHERE SALARY > AVG(SALARY)) ではなく、 副照会 の形で書かれています。 WHERE 文節の中に列関数をコーディングすることはできません。 これは操作の順序のためです。 WHERE 文節は、SELECT 文節より前に評価されるものと考えてください。 そのため、WHERE 文節が評価される時点では、 列関数によって値の集合にアクセスすることができません。 この値の集合は、もっと後で SELECT 文節によって選択されます。

列関数の引き数の一部として DISTINCT 要素を使用するなら、 関数の適用前に値の重複をなくすことができます。 COUNT(DISTINCT WORKDEPT) とすると、 異なる部署の数が計算されます。

スカラー関数

スカラー関数 は、 1 つの値に対してなんらかの操作を実行して、別の 1 つの値を戻します。 DB2 ユニバーサル・データベースに用意されているスカラー関数の例としては、 下記のものがあります。 これらはほんの一部分にすぎません。

ABS
数値の絶対値を戻します。

HEX
値を 16 進数にしたものを戻します。

LENGTH
引き数の文字数を戻します (グラフィック・ストリングの場合、2 バイト文字の数になります)。

YEAR
日付 / 時刻値のうち年の部分を抽出します。

スカラー関数のリストとその説明については、 SQL 解説書 を参照してください。

次のステートメントでは、 ORG 表から部署名と、その名前の長さを戻します。

     SELECT DEPTNAME, LENGTH(DEPTNAME)
        FROM ORG

このステートメントの結果は、次のとおりです。

     DEPTNAME       2          
     -------------- -----------
     Head Office             11
     New England             11
     Mid Atlantic            12
     South Atlantic          14
     Great Lakes             11
     Plains                   6
     Pacific                  7
     Mountain                 8

注: LENGTH(DEPTNAME) に意味のある名前を付けるための AS 文節を使っていないため、 システムの生成した番号が第 2 欄に表示されています。

表関数

表関数 は、 表の列を戻します。 表の列は、 単純な CREATE TABLE ステートメントで作成する表そのものとよく似ています。

表関数は、 SQL ステートメントの FROM 文節でのみ使用できます。

今のところ、 DB2 ユニバーサル・データベースでサポートされている唯一の表関数は SQLCACHE_SNAPSHOT です。

SQLCACHE_SNAPSHOT
DB2 動的 SQL ステートメント・キャッシュのスナップショットの結果を表の形で戻します。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]