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