列からデータを選択する方法
結果表に対してデータベースから列を選択するために、複数の方法が使用できます。
表内の列からデータを選択する方法は複数ありますが、適切なパフォーマンスを実現するために、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 文節でその名前を使用します。