列からデータを選択する方法

結果表に対してデータベースから列を選択するために、複数の方法が使用できます。

表内の列からデータを選択する方法は複数ありますが、適切なパフォーマンスを実現するために、SELECT ステートメントの適切な使用方法に従う必要があります。 SELECT文を記述する際には、プログラムに必要な行と列のみを選択すると、CPU負荷とメモリ使用量を削減でき、最良の結果が得られます。

一部の列の選択

各列の名前を指定することにより、目的の列を選択します。 すべての列は、指定した順序で表示されます。表の中の順序ではありません。

汎用プログラミングインターフェース情報の開始。

DEPT 表には、MGRNO 列の前に DEPTNO 列が入っていることに注意してください。 次のような照会を行ったとします。

SELECT MGRNO, DEPTNO
	FROM DSN8D10.DEPT
	WHERE ADMRDEPT = 'A00';

結果の表は、次の例のようになります。

MGRNO   DEPTNO
======  ======
000010  A00
000020  B01
000030  C01
------  D01
000050  E01

この SELECT ステートメントは、DEPT 表にある各行の指定の 2 列に含まれるデータをリトリーブします。 単一の SELECT ステートメントで、最大 750 個の列からデータを選択できます。

汎用プログラミングインターフェース情報の終了。

すべての列の選択

Db2 データを選択するために列名を知らなければなりません。 SELECT 節にアスタリスク (*) を使用して、指定した表の選択した各行から、すべての列を取得します。 Db2 テーブルで宣言されている順番にカラムを選択します。 隠蔽された列 (ROWID 列および XML 文書 ID 列など) は、SELECT * ステートメントの結果には含まれません。

汎用プログラミングインターフェース情報の開始。

以下の照会を考えてみます。

SELECT * 
	FROM DSN8A10.DEPT
	WHERE ADMRDEPT = 'A00';

結果の表は、次の例のようになります。

DEPTNO  DEPTNAME                              MGRNO   ADMRDEPT  LOCATION
======  ========                              =====   ========  ========
A00     SPIFFY COMPUTER SERVICE DIV.          000010  A00
B01     PLANNING                              000020  A00
C01     INFORMATION CENTER                    000030  A00
D01     DEVELOPMENT CENTER                    ------  A00
E01     SUPPORT SERVICES                      000050  A00

この SELECT ステートメントは、DEPT 表のリトリーブされた各行の各列からデータをリトリーブします。 WHERE 文節が指定されていないので、このステートメントは、すべての行のデータを取り出します。

この例では、5 番目の行にはこの部門に管理者が指定されていないため NULL 値が含まれています。 Null 値は、ダッシュとして表示されます。

汎用プログラミングインターフェース情報の終了。

SELECT * のステートメントは、ダイナミックSQLやビュー定義と併用する場合に最も適切です。 SELECT * を静的SQLで使用することは避けてください。 アプリケーションが戻す列数をプログラム作成者が知っている場合、静的 SQL アプリケーションを作成します。 その列数はアプリケーション外で変わる可能性があります。 その表に対して変更が発生した場合、そのアプリケーションを変更して、表の中で変更された列数を反映する必要があります。

SELECT * ステートメントは、テーブルの各取得行のすべての列を取得する必要がある場合のみ使用してください。 特定の列を選択することで、目的の結果をより効率的に取得できる高度なフィルターを使用して照会できます。

複写行の除去

DISTINCT キーワードを使用して結果表から冗長な重複行を除去し、それにより各行に固有データが含まれるようにします。

以下の照会では、DISTINCT キーワードを使用して各管理部門の部門番号をリストします。

汎用プログラミングインターフェース情報の開始。
SELECT DISTINCT ADMRDEPT
  FROM DSN8D10.DEPT;

結果の表は、次の例のようになります。

ADMRDEPT
========
A00
D11
E01
汎用プログラミングインターフェース情報の終了。

単一の照会の中に複数の DISTINCT キーワードを使用できます。

派生した列の選択および結果の列の命名

定数、式、または関数から派生した列を選択できます。 AS 節を使用すると、結果の列に名前を付けることができます。 このキーワードが有用なのは、式または関数から派生された列がある場合です。

汎用プログラミングインターフェース情報の開始。

以下の照会では、式 SALARY+COMM には TOTAL_SAL という名前が付きます。

SELECT EMPNO, (SALARY + COMM) AS TOTAL_SAL
	FROM DSN8D10.EMP;

結果の表は、次の例のようになります。

EMPNO      TOTAL_SAL
======     =========
000290      16567.00
000310      17172.00
200310      17172.00
000260      18630.00
000300      19170.00
000210      19732.00
⋮

この照会では、EMP 表の全行からデータを選択し、式の結果を計算し、SELECT ステートメントで示す順序で各列を戻します。 結果表では、派生されたどの列 (上記の例での (SALARY + COMM) など) も名前がありません。 AS 文節を使用して無名列に名前を指定できます。

派生された列の値別に結果表の行をソートするには、AS 文節を使用してその列の名前を指定し、ORDER BY 文節でその名前を使用します。

汎用プログラミングインターフェース情報の終了。