Oracle12cから追加されたFETCH FIRST N ROWS ONLYを紹介します。
Oracle11以前はORDER BY でソートした結果の1件目だけを抽出するというようなことをする場合、内部ビューを使う必要がありましたが、Oracle12cでは内部ビューを使わなくてもよいです。
年収が最大の従業員レコードを取得する。
前提条件
SELECT
EMP_ID AS 従業員ID
,SALARY AS 年収
FROM
TB_SALARY
;
従業員ID 年収
---------- ----------
1 4000000
2 5000000
3 6000000
サンプルSQL(Oracle12c以降)
SELECT EMP_ID AS 従業員ID ,SALARY AS 年収 FROM TB_SALARYORDER BY SALARY DESC FETCH FIRST 1 ROWS ONLY; 従業員ID 年収 ---------- ---------- 3 6000000
解説
ORDER BYでソート順序を指定して、FETCH FIRSTで何件取得するかを指定するだけです。
Oracle11以前は下記の様な内部ビューを使ったSQLを作らないといけませんでしたが、Oracle12cからはスッキリしたSQLで対応できます。
サンプルSQL(Oracle11以前)
SELECT
Y.EMP_ID AS 従業員ID
,Y.SALARY AS 年収
FROM
(
SELECT
X.EMP_ID
,X.SALARY
FROM
TB_SALARY X
ORDER BY SALARY DESC
) Y
WHERE
ROWNUM = 1
;
従業員ID 年収
---------- ----------
3 6000000
