SELECT ステートメント照会の例

以下の例は、SELECT ステートメント照会について説明しています。

  • 例 1: EMPLOYEE 表からすべての列と行を選択します。
      SELECT * FROM EMPLOYEE
  • 例 2: PROJECT 表からプロジェクト名 (PROJNAME)、開始日 (PRSTDATE)、 および終了日 (PRENDATE) を選択します。 その日付が最新の終了日から順に結果表を配列します。
      SELECT PROJNAME, PRSTDATE, PRENDATE
       FROM PROJECT          
       ORDER BY PRENDATE DESC
  • 例 3: EMPLOYEE 表のすべての部門の部門番号 (WORKDEPT) と部門別給与 (SALARY) の平均額を選択します。 結果表は、部門別給与の平均額の昇順に配列します。
      SELECT WORKDEPT, AVG(SALARY)
         FROM EMPLOYEE   
         GROUP BY WORKDEPT 
         ORDER BY 2
  • 例 4: C プログラムで使用する UP_CUR という名前のカーソルを宣言して、 PROJECT 表の開始日 (PRSTDATE) と終了日 (PRENDATE) の列を更新します。 プログラムは、各行のこれらの 2 つの値と、 プロジェクト番号 (PROJNO) とを受け取る必要があります。
      EXEC SQL  DECLARE UP_CUR CURSOR FOR
                  SELECT PROJNO, PRSTDATE, PRENDATE
                    FROM PROJECT
                    FOR UPDATE OF PRSTDATE, PRENDATE;
  • 例 5: この例では、SAL+BONUS+COMM に TOTAL_PAY という名前を付けます。
       SELECT SALARY+BONUS+COMM AS TOTAL_PAY
         FROM EMPLOYEE
         ORDER BY TOTAL_PAY
  • 例 6: 営業担当員の従業員番号と給与、およびその部門の給与平均額と人数とを調べます。 また、部門別給与平均額と、平均額の最高値も調べます。
    ここでは、共通表式を使用することによって、DINFO ビューを通常のビューとして作成する際の処理リソースを節約します。 ステートメントの作成中に、ビューのカタログにはアクセスされません。 これは、全選択の残りの部分のコンテキストにより、 ビューによって考慮するのはセールス担当の部門の行だけだからです。
     WITH
        DINFO (DEPTNO, AVGSALARY, EMPCOUNT) AS
            (SELECT OTHERS.WORKDEPT, AVG(OTHERS.SALARY), COUNT(*)
              FROM EMPLOYEE OTHERS
              GROUP BY OTHERS.WORKDEPT
            ),
        DINFOMAX AS
            (SELECT MAX(AVGSALARY) AS AVGMAX FROM DINFO)
     SELECT THIS_EMP.EMPNO, THIS_EMP.SALARY,
            DINFO.AVGSALARY, DINFO.EMPCOUNT, DINFOMAX.AVGMAX
      FROM EMPLOYEE THIS_EMP, DINFO, DINFOMAX
      WHERE THIS_EMP.JOB = 'SALESREP'
      AND THIS_EMP.WORKDEPT = DINFO.DEPTNO
  • 例 7: EMPLOYEE と PROJECT という 2 つの表があるとして、従業員 SALLY を新しい従業員 GEORGE に置き換え、 SALLY が指揮していたプロジェクトをすべて GEORGE に割り当て、更新されたプロジェクトの名前を戻します。
      WITH
        NEWEMP AS (SELECT EMPNO FROM NEW TABLE
                    (INSERT INTO EMPLOYEE(EMPNO, FIRSTNME)
                        VALUES(NEXT VALUE FOR EMPNO_SEQ, 'GEORGE'))),
        OLDEMP AS (SELECT EMPNO FROM EMPLOYEE WHERE FIRSTNME = 'SALLY'),
        UPPROJ AS (SELECT PROJNAME FROM NEW TABLE
                    (UPDATE PROJECT
                        SET RESPEMP = (SELECT EMPNO FROM NEWEMP)
                        WHERE RESPEMP = (SELECT EMPNO FROM OLDEMP))),
        DELEMP AS (SELECT EMPNO FROM OLD TABLE
                    (DELETE FROM EMPLOYEE
                        WHERE EMPNO = (SELECT EMPNO FROM OLDEMP)))
      SELECT PROJNAME FROM UPPROJ;
  • 例 8: DEPT 表からデータを取り出します。 次にそのデータは、取り出された更新内容に合わせて更新されますが、 照会の実行時にはロックされます。
      SELECT DEPTNO, DEPTNAME, MGRNO
        FROM DEPT
        WHERE ADMRDEPT ='A00'
        FOR READ ONLY WITH RS USE AND KEEP EXCLUSIVE LOCKS
  • 例 9: EMPLOYEE 表の列および行を全選択します。 別のトランザクションが並行して EMPLOYEE 表のデータの更新、削除、または挿入を行っている場合、選択操作は他のトランザクションの完了後までデータの取得を待機します。
      SELECT * FROM EMPLOYEE WAIT FOR OUTCOME