2020年8月15日 星期六

[Oracle] 取得N~M筆資料或Top N資料

[Oracle] 取得N~M筆資料或Top N資料

[Oracle] 取得N~M筆資料或Top N資料

簡介

之前使用SQL SERVER要取得前N筆資料只需要使用TOP N即可取得所要的結果,而且還可以取得排序後的結果,而Oracle應該如何下指令呢?

SELECT TOP 10 * FROM Northwind.Orders ORDER BY CustomerID;

Oralce取得前N筆資料

  • 未需排序

    SELECT * FROM table_name WHERE ROWNUM < 10;
    
  • 如要排序則要搭配Subquery查詢

    SELECT
    	a.*
    FROM
    	(
    		SELECT
    			*
    		FROM
    			SQLPRO.CUSTOMER
    		ORDER BY
    			FIRST_NAME
    	) a
    WHERE
    	rownum <= 10;
    
  • 如版本為Oracle Database 12c以上,則可以使用FETCH

    SELECT
    	*
    FROM
    	SQLPRO.CUSTOMER
    ORDER BY
    	FIRST_NAME
    FETCH FIRST 10 ROWS ONLY;
    

Oralce取得N~M筆資料

  • Oralce Database 12c以前

    SELECT
    	FIRST_NAME
    FROM
    	(
    		SELECT
    			FIRST_NAME,
    			ROWNUM AS rnum
    		FROM
    			(
    				SELECT
    					FIRST_NAME
    				FROM
    					SQLPRO.CUSTOMER
    				ORDER BY
    					FIRST_NAME
    			)
    		WHERE
    			ROWNUM <= M
    	)
    WHERE
    	rnum >= N;
    
  • Oralce Database 12c以後,利用 FETCHOFFSET

    SELECT
    	FIRST_NAME
    FROM
    	SQLPRO.CUSTOMER
    ORDER BY
    	FIRST_NAME
    OFFSET (N - 1) ROWS
    FETCH NEXT (M - N + 1) ROWS ONLY;
    -- 略過N-1筆,從第 N 筆開始,並取得(M - N + 1)筆資料
    


參考資料

如有錯誤或建議,歡迎留言指教,謝謝!!

(相關內容如有侵犯隱私或著作權,請協助通知刪除,感謝)

沒有留言:

張貼留言