添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
2019 年 7 月 30 日 ,由 Robert Gravelle 撰寫

SQL LIMIT 子句可以約束 SELECT 語句傳回的列數。對於 SQL Server 或 MS Access 等 Microsoft 資料庫,可以使用 SELECT TOP 語句來限制結果,這是 Microsoft 專有的 SELECT LIMIT 語句。但是,對於大多數關聯式資料庫(DBMS),包括 MySQL/MariaDB、PostgreSQL 和 Oracle,SQL LIMIT 子句可以解決多個問題。在今天的文章中,我們將使用 Navicat for PostgreSQL 來探索其中的一些 LIMIT 的用法。

保持結果集易於管理

在許多生產和測試資料庫中,資料表大小通常達到數百萬列並且有數十欄。因此,對資料庫運行 SELECT * 查詢絕不是一個好主意。將結果保持在一百或一千列可以將結果集保持在更易消化的大小。

Navicat 開發和管理工具根據預設會自動限制結果集,以防止對資料庫伺服器造成過度負擔。當開啟資料表時,你可以看到它的運行情況。在應用程式視窗的底部,顯示了 Navicat取得資料表列時執行的SQL。它以「LIMIT 1000 OFFSET 0」結尾,這意味著只顯示最前的 1000 筆記錄。

顧名思義,前 N 個的查詢是那些試圖從結果集中尋找最前數目的記錄的查詢。這可能是前 1、前 3、前 5、前 10或前 [任何] 數字。一些常見的例子是:

  • 尋找薪酬最高的前 10 名員工
  • 尋找盈利最多的前 20 名客戶
  • 尋找系統中的前 3 個使用者
  • 僅使用 ORDER BY 和 WHERE 子句而不使用 LIMI T子句是很難處理這些查詢。這是一個例子:

    前 5 個唯一的 Job ID

    假設我們想在資料表中找到最前的唯一 Job ID。這是執行此操作的查詢:

    在這種情況下,2018-01-02 是最接近的日期。

    後 N 個的查詢

    前 N 個的查詢的必然產物是後 N 個的查詢。這是嘗試從結果集中尋找最後數目的記錄的查詢。我們可以很容易地將我們的「前」查詢轉換為對應的「後」查詢!

    後 5 個唯一的 Job ID

    若要傳回後 5 個唯一 Job ID,你需要做的就是刪除 ORDER BY 子句中的 DESC 修飾詞。根據預設,這將以遞增(ASC)順序排序記錄:

    部落格封存檔