SELECT ステートメントによるデータの取り出し

データを取得する最も簡単な方法は、SQL ステートメント SELECT を使用して結果表を指定する方法です。 取り出す列と行を指定できます。

始める前に

このセクションの例と同様の独自のSQLステートメントを開発し、SPUFIを使用して動的に実行することを検討してください。 チュートリアルについては、「レッスン 1.1: 対話形式でデータをクエリする」を参照してください。

Db2 command line processor または Db2 Query Management Facility (QMF) もご利用いただけます。

プロシージャー

結果表にデータを取り出すには、

SELECT ステートメントを発行します。

例 1: SELECT * ですべての列を選択します。
Db2 データを選択するために列名を知らなければなりません。 指定した表の選択行ごとにすべての列を取り出すことを示すには、SELECT 文節に アスタリスク (*) を使用してください。 暗黙的な隠し列 (ROWID 列や XML 文書の ID 列など) は、SELECT * ステートメントの結果に含まれません。 これらの列の値を表示するには、列名を指定する必要があります。

次の SQL ステートメントは、部門表からすべての列を選択します。

SELECT *
  FROM DSN8D10.DEPT;

結果表は、以下の出力のようになります。

DEPTNO  DEPTNAME                         MGRNO      ADMRDEPT  LOCATION
======  ==============================   ======     ========  ========
A00     SPIFFY COMPUTER SERVICES DIV.    000010     A00       --------
B01     PLANNING                         000020     A00       --------
C01     INFORMATION CENTER               000030     A00       --------
D01     DEVELOPMENT CENTER               ------     A00       --------
D11     MANUFACTURING CENTER             000060     D01       --------
D21     ADMINISTRATION SYSTEMS           000070     D01       --------
E01     SUPPORT SERVICES                 000050     A00       --------
E11     OPERATIONS                       000090     E01       --------
E21     SOFTWARE SUPPORT                 000100     E01       --------
F22     BRANCH OFFICE F2                 ------     E01       --------
G22     BRANCH OFFICE G2                 ------     E01       --------
H22     BRANCH OFFICE H2                 ------     E01       --------
I22     BRANCH OFFICE I2                 ------     E01       --------
J22     BRANCH OFFICE J2                 ------     E01       --------

WHERE 文節が指定されていないので、このステートメントは、すべての行のデータを取り出します。

結果表の MGRNO 列と LOCATION 列のダッシュは、値が NULL 値で あることを示します。

SELECT * は、動的 SQL およびビュー定義で使用する場合に最も適しています。 静的SQLでSELECT *を使用できますが、ホスト変数の互換性とパフォーマンスへの影響の可能性があるため、お勧めしません。 SELECT *が参照表に列を追加するとします。 その列の受信ホスト変数を定義しない場合、エラーが発生するか、追加列のデータが取得されない可能性があります。

アスタリスクの代わりに、静的SELECT ステートメントに列名をリストすると、SELECT * の発生可能問題を回避できます。 また、受け取りホスト変数と結果表中の列の対応関係を知ることもできます。

例 2: SELECT 列名 を使って、特定の列を選択します。
各列の名前を指定して、取り出す列 (複数の場合ある) を照会します。 1 つの SELECT ステートメントによって選択できるデータの列数は、1 列から 最大 750 列までです。 列はすべて、表の中での順序ではなく、アプリケーションで指定した順序に取り出されます。

たとえば、次のSQLステートメントは、部門表からMGRNO列とDEPTNO列のみを取得します。

SELECT MGRNO, DEPTNO
  FROM DSN8D10.DEPT;

結果表は、以下の出力のようになります。

MGRNO     DEPTNO
======    ======
000010    A00
000020    B01
000030    C01
------    D01
000050    E01
000060    D11
000070    D21
000090    E11
000100    E21
------    F22
------    G22
------    H22
------    I22
------    J22
例 3: 暗黙の非表示列からデータを選択します。
暗黙的な隠し列 (ROWID や XML 文書 ID など) からデータを選択するには、SYSIBM.SYSCOLUMNS 内で列名を検索し、これらの名前を SELECT リストに指定します。 例えば、次の表を作成し、データを追加するとします。
CREATE TABLE MEMBERS (MEMBERID INTEGER,
                      BIO 		 XML,
                      REPORT 	 XML,
                      RECOMMENDATIONS 	XML);

Db2暗黙的な隠しXML文書 ID列1つ生成します。 生成された XML 文書 ID 列を含むすべての列のデータを取り出すには、まず SYSIBM.SYSCOLUMNS 内で生成された列の名前を検索します。 名前は DB2_GENERATED_DOCID_FOR_XML であるとします。 その後、次のステートメントを指定します。

SELECT DB2_GENERATED_DOCID_FOR_XML, MEMBERID, BIO,
       REPORT, RECOMMENDATIONS FROM MEMBERS