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