SQL

FETCH FIRST

  • このエントリーをはてなブックマークに追加

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_SALARY
ORDER 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

  • このエントリーをはてなブックマークに追加

コメントを残す

*