SELECT文の例

SELECT文を発行してデータを取得する方法を理解するには、例が役立ちます。

  • 例 1: DSN8D10.EMP からすべての行を選択します。

       SELECT * FROM DSN8D10.EMP;
  • 例 2: DSN8D10.EMP からすべての行を選択し、結果テーブルを採用日順に並べます。

       SELECT * FROM DSN8D10.EMP
          ORDER BY HIREDATE;
  • 例 3: テーブル DSN8D10.EMP 内のすべての部門の部門番号 (WORKDEPT) と平均部門給与 (SALARY) を選択します。 結果表は、部門別給与の平均額の昇順に配列します。

       SELECT WORKDEPT, AVG(SALARY)
         FROM DSN8D10.EMP
         GROUP BY WORKDEPT
         ORDER BY 2;
  • 例 4: テーブル DSN8D10.EMP 内のさまざまな給与、ボーナス、手数料を変更します。 変更を行うのは、部門 D11 と D21 の従業員に限ります。 位置付け UPDATE を使用してこれを行うために、UP_CUR という名前のカーソルを使います。 更新可能なすべての列を更新することを示すため、 カーソル宣言で FOR UPDATE 文節を使用します。 以下は、PL/I プログラムでの宣言です。

       EXEC SQL DECLARE UP_CUR CURSOR FOR
         SELECT WORKDEPT, EMPNO, SALARY, BONUS, COMM
           FROM DSN8D10.EMP
           WHERE WORKDEPT IN ('D11','D21')
           FOR UPDATE;

    カーソルが宣言されたところから始まり、すべての更新可能な列が更新されます。 特定の列 (例えば、給与列) だけを更新する必要がある場合 、FOR UPDATE 文節を使用して給与列を指定することができます (FOR UPDATE OF SALARY)。

  • 例 5: テーブル DSN8D10.EMP で最大、最小、平均ボーナスを検索します。 ステートメントを含むプランまたはパッケージが バインドされている ISOLATION の値とは関係なく、非コミット読み取りの 分離でステートメントを実行します。 SELECT ステートメントの照会番号として 13 を割り当てます。

       EXEC SQL
         SELECT MAX(BONUS), MIN(BONUS), AVG(BONUS)
           INTO :MAX, :MIN, :AVG
           FROM DSN8D10.EMP
           WITH UR
           QUERYNO 13;

    バインド・オプション EXPLAIN(YES) を指定した場合、行がプラン表に挿入されます。 以下の行の QUERYNO 列に使用される値は 13 です。

  • 例 6: 以下に示すカーソル宣言は 、PL/I プログラムの例です。 宣言内のクエリでは、 X.RMT_TAB は他の Db2 のテーブルのエイリアスです。 したがって、クエリが使用されると、DRDAアクセスを使用して処理されます。 分散型リレーショナルデータベースを参照。

    この宣言は、照会のカーソルを使って位置付け UPDATE または位置付け DELETE を行わないことを示しています。 また、これは、照会のアクセス・パスを、最大で 50 行の検索に 対して最適化するように指定しています。 その場合でも、 プログラムは結果表から 50 行を超えて取り出すことができます。 この結果表は、別名で識別された表全体から構成されます。 ただし、50 行を超えて取り出される場合は、効率が落ちることがあります。

       EXEC SQL DECLARE C1 CURSOR FOR
         SELECT * FROM X.RMT_TAB
         OPTIMIZE FOR 50 ROWS
         FOR READ ONLY;
    FETCH FIRST 文節を OPTIMIZE FOR 文節の代わりに使用し、 次の例のように必ず 50 行だけを取り出すことができます。
       EXEC SQL DECLARE C1 CURSOR FOR
         SELECT * FROM X.RMT_TAB
         FETCH FIRST 50 ROWS ONLY;
  • 例7: テーブルDSN8D10.EMP に1000行あり、 DSN8D10.EMP_PHOTO_RESUME に挿入された最初の5つのEMP_ROWID値を確認したいとします。

       EXEC SQL DECLARE CS1 CURSOR FOR
         SELECT EMP_ROWID
           FROM FINAL TABLE (INSERT INTO DSN8D10.EMP_PHOTO_RESUME (EMPNO)
                            SELECT EMPNO FROM DSN8D10.EMP)
           FETCH FIRST 5 ROWS ONLY;

    1000行すべてがDSN8D10.EMP_PHOTO_RESUME に挿入されているが、最初の5行のみが返される。