| PostgreSQL 7.4 文檔 | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 7. 查詢 | Fast Forward | Next |
LIMIT和OFFSET允許你只檢索由查詢剩餘部分選出的行的一部分:
SELECT select_list FROM table_expression [LIMIT { number | ALL }] [OFFSET number]
如果給出了一個限制計數,那麼返回不超過那麼多的行。 (但可能更少些,因為查詢本身可能生成的行數就比較少。) LIMIT ALL和省略 LIMIT子句一樣。
OFFSET說明在開始返回行之前忽略多少行。 OFFSET 0和省略OFFSET子句是一樣的。 如果OFFSET和LIMIT都出現了, 那麼在計算LIMIT個行之前忽略OFFSET行。
如果使用LIMIT,那麼用ORDER BY 子句把結果行約束成一個唯一的順序是一個好主意。 否則你就會拿到一個不可預料的該查詢的行的子集。 --- 你要的可能是第十到二十行,但以什麼順序的十到二十? 除非你聲明了ORDER BY,否則順序是不知道的。
查詢優化器在生成查詢規劃的時候會考慮LIMIT,因此如果你給 LIMIT和OFFSET不同的東西,那麼你很可能收到不同的規劃(產生不同的行順序)。 因此,使用不同的LIMIT/OFFSET值選擇不同的查詢結果的子集將生成不一致的結果, 除非你用ORDER BY強制一個可預料的順序。這可不是臭蟲; 這是一個很自然的結果,因為 SQL 沒有許諾把查詢的結果按照任何特定的順序發出,除非用了ORDER BY來約束順序。