2013-04-22 64 views
-1

我需要從我的C#代碼創建請求到oracle數據庫什麼會選擇網頁頁面的行。我想爲例如獲得從100到200第二頁的行。 我發現一些代碼,什麼是真正的作品尋呼(oracle數據庫)

SELECT * FROM 
(
    SELECT a.*, rownum r__ 
    FROM 
    (
     SELECT * FROM ORDERS WHERE CustomerID LIKE 'A%' 
     ORDER BY OrderDate DESC, ShippingDate DESC 
    ) a 
    WHERE rownum < ((pageNumber * pageSize) + 1) 
) 
WHERE r__ >= (((pageNumber-1) * pageSize) + 1) 

它的工作原理,我可以用它改變時,裏面包裹此塊

SELECT * FROM ORDERS WHERE CustomerID LIKE 'A%' 
ORDER BY OrderDate DESC, ShippingDate DESC 

但它是如何工作的?我無法理解。我熟悉SQL請求,但什麼是

SELECT a.*, rownum r__ 

,什麼是

) a 

從包裝後?

你能這麼好心地向我解釋這個包裝嗎?

+0

你也可以通過設置'optimizer_mode = FIRST_ROWS'來獲益。我還建議爲此目的查看分析函數'row_number()'。 – haki 2013-04-22 19:07:08

回答

1

select a。*,rownum - >從表/別名a和rownumber中選擇所有記錄,以便您可以選擇一個子集。

(SELECT * FROM訂單WHERE客戶id LIKE 'A%' ORDER BY訂購日期DESC,ShippingDate DESC)一

創建 '一個' 作爲表的別名允許你把它當作外選擇表的表。

請注意,選擇*被認爲是不好的做法,因爲對錶結構的更改可能會破壞您的代碼。

+0

[SELECT語句的FROM子句中的子查詢也稱爲內嵌視圖。](http://docs.oracle.com/cd/E11882_01/server.112/e26088/queries007.htm) – 2013-04-22 18:10:27

+0

關於select的好主意*當我們改變表格結構中的某些東西時會破壞代碼。並感謝您的回答。一切都變得更加清晰=) – Vitalii 2013-04-22 19:13:56