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 個的查詢
顧名思義,前 N 個的查詢是那些試圖從結果集中尋找最前數目的記錄的查詢。這可能是前 1、前 3、前 5、前 10或前 [任何] 數字。一些常見的例子是:
- 尋找薪酬最高的前 10 名員工
- 尋找盈利最多的前 20 名客戶
- 尋找系統中的前 3 個使用者
僅使用 ORDER BY 和 WHERE 子句而不使用 LIMI T子句是很難處理這些查詢。這是一個例子:
前 5 個唯一的 Job ID
假設我們想在資料表中找到最前的唯一 Job ID。這是執行此操作的查詢:
DISTINCT 關鍵字確保從結果中刪除重複的 ID。
特定日期最接近的列
你可以使用 LIMIT 找到特定日期最接近的列。只需比較列日期與特定日期,排序結果,並將結果限制為你希望尋看的列數。以下的查詢傳回 creation_date 大於 '2018-01-01' 的列:
在這種情況下,2018-01-02 是最接近的日期。
後 N 個的查詢
前 N 個的查詢的必然產物是後 N 個的查詢。這是嘗試從結果集中尋找最後數目的記錄的查詢。我們可以很容易地將我們的「前」查詢轉換為對應的「後」查詢!
後 5 個唯一的 Job ID
若要傳回後 5 個唯一 Job ID,你需要做的就是刪除 ORDER BY 子句中的 DESC 修飾詞。根據預設,這將以遞增(ASC)順序排序記錄:
特定日期之前最接近的列
在特定日期之前找到最接近的列同樣相當容易。我們只需要將大於 '>'的運算子變更為小於 '<',並以遞減(DESC)順序重新排序結果:
總結
在今天的文章中,我們使用 Navicat for PostgreSQL 探索了 LIMIT 子句的一些用法。想試試 Navicat for PostgreSQL 嗎?你可以完全免費試用它 14 天!