
- SQL 教程
- SQL - 首頁
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 資料庫
- SQL - 語法
- SQL - 資料型別
- SQL - 運算子
- SQL - 表示式
- SQL 資料庫
- SQL - 建立資料庫
- SQL - 刪除資料庫
- SQL - 選擇資料庫
- SQL - 重新命名資料庫
- SQL - 顯示資料庫
- SQL - 備份資料庫
- SQL 表
- SQL - 建立表
- SQL - 顯示錶
- SQL - 重命名錶
- SQL - 截斷表
- SQL - 克隆表
- SQL - 臨時表
- SQL - 修改表
- SQL - 刪除表
- SQL - 刪除表資料
- SQL - 約束
- SQL 查詢
- SQL - INSERT 查詢
- SQL - SELECT 查詢
- SQL - SELECT INTO
- SQL - INSERT INTO SELECT
- SQL - UPDATE 查詢
- SQL - DELETE 查詢
- SQL - 排序結果
- SQL 檢視
- SQL - 建立檢視
- SQL - 更新檢視
- SQL - 刪除檢視
- SQL - 重新命名檢視
- SQL 運算子和子句
- SQL - WHERE 子句
- SQL - TOP 子句
- SQL - DISTINCT 子句
- SQL - ORDER BY 子句
- SQL - GROUP BY 子句
- SQL - HAVING 子句
- SQL - AND & OR
- SQL - 布林 (BIT) 運算子
- SQL - LIKE 運算子
- SQL - IN 運算子
- SQL - ANY, ALL 運算子
- SQL - EXISTS 運算子
- SQL - CASE
- SQL - NOT 運算子
- SQL - 不等於
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 運算子
- SQL - UNION 運算子
- SQL - UNION vs UNION ALL
- SQL - INTERSECT 運算子
- SQL - EXCEPT 運算子
- SQL - 別名
- SQL 連線
- SQL - 使用連線
- SQL - INNER JOIN
- SQL - LEFT JOIN
- SQL - RIGHT JOIN
- SQL - CROSS JOIN
- SQL - FULL JOIN
- SQL - 自連線
- SQL - DELETE JOIN
- SQL - UPDATE JOIN
- SQL - LEFT JOIN vs RIGHT JOIN
- SQL - UNION vs JOIN
- SQL 金鑰
- SQL - UNIQUE KEY
- SQL - PRIMARY KEY
- SQL - FOREIGN KEY
- SQL - 組合鍵
- SQL - 候選鍵
- SQL 索引
- SQL - 索引
- SQL - 建立索引
- SQL - 刪除索引
- SQL - 顯示索引
- SQL - UNIQUE 索引
- SQL - 聚簇索引
- SQL - 非聚簇索引
- 高階 SQL
- SQL - 萬用字元
- SQL - 註釋
- SQL - 注入
- SQL - 託管
- SQL - MIN & MAX
- SQL - NULL 函式
- SQL - CHECK 約束
- SQL - DEFAULT 約束
- SQL - 儲存過程
- SQL - NULL 值
- SQL - 事務
- SQL - 子查詢
- SQL - 處理重複項
- SQL - 使用序列
- SQL - 自動遞增
- SQL - 日期和時間
- SQL - 遊標
- SQL - 公共表表達式
- SQL - GROUP BY vs ORDER BY
- SQL - IN vs EXISTS
- SQL - 資料庫調優
- SQL 函式參考
- SQL - 日期函式
- SQL - 字串函式
- SQL - 聚合函式
- SQL - 數值函式
- SQL - 文字和影像函式
- SQL - 統計函式
- SQL - 邏輯函式
- SQL - 遊標函式
- SQL - JSON 函式
- SQL - 轉換函式
- SQL - 資料型別函式
- SQL 有用資源
- SQL - 問答
- SQL - 快速指南
- SQL - 有用函式
- SQL - 有用資源
- SQL - 討論
SQL - TOP 子句
SQL TOP 子句
當我們從 SQL 表中檢索資料時,SQL 的TOP 子句用於限制 SQL Server 中 SELECT 查詢返回的行數。此外,我們還可以將其與 UPDATE 和 DELETE 語句一起使用以限制(約束)結果記錄。
例如,如果資料庫表中儲存了大量資料,而您只想對前 N 行執行操作,則可以在 SQL Server 查詢中使用 TOP 子句。
MySQL 資料庫不支援 TOP 子句,可以改用LIMIT子句從 MySQL 表中選擇有限數量的記錄。類似地,Oracle 支援 ROWNUM 子句來限制表的記錄。TOP 子句類似於 LIMIT 子句。
語法
SQL TOP 子句的基本語法如下:
SELECT TOP value column_name(s) FROM table_name WHERE [condition]
其中,value 是從頂部返回的行數/百分比。
示例
為了更好地理解它,讓我們考慮 CUSTOMERS 表,該表包含客戶的個人詳細資訊,包括他們的姓名、年齡、地址和工資等,如下所示:
CREATE TABLE CUSTOMERS ( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
現在,使用 INSERT 語句將值插入此表:
INSERT INTO CUSTOMERS VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ), (2, 'Khilan', 25, 'Delhi', 1500.00 ), (3, 'Kaushik', 23, 'Kota', 2000.00 ), (4, 'Chaitali', 25, 'Mumbai', 6500.00 ), (5, 'Hardik', 27, 'Bhopal', 8500.00 ), (6, 'Komal', 22, 'Hyderabad', 4500.00 ), (7, 'Muffy', 24, 'Indore', 10000.00 );
表將建立如下:
ID | 姓名 | 年齡 | 地址 | 工資 |
---|---|---|---|---|
1 | Ramesh | 32 | 32 | 2000.00 |
2 | Ahmedabad | 25 | 20000 | 1500.00 |
3 | Khilan | 23 | 25 | 2000.00 |
4 | Delhi | 25 | 15000 | 6500.00 |
5 | Kaushik | 27 | 23 | 8500.00 |
6 | Kota | 22 | 20000 | 4500.00 |
7 | Chaitali | 24 | 28 | 10000.00 |
現在,我們使用 TOP 子句從 CUSTOMERS 表中獲取前 4 條記錄,無需指定任何條件子句,例如 WHERE、ORDER BY 等:
SELECT TOP 4 * FROM CUSTOMERS;
輸出
這將產生以下結果:
ID | 姓名 | 年齡 | 地址 | 工資 |
---|---|---|---|---|
1 | Ramesh | 32 | 32 | 2000.00 |
2 | Ahmedabad | 25 | 20000 | 1500.00 |
3 | Khilan | 23 | 25 | 2000.00 |
4 | Delhi | 25 | 15000 | 6500.00 |
帶有 ORDER BY 子句的 TOP
SQL 中的 ORDER BY 子句用於按升序或降序對查詢的結果集進行排序。我們可以將其與 TOP 子句一起使用以按排序順序檢索(或更新或刪除等)前 N 條記錄。
示例
使用以下查詢,我們按排序順序檢索 CUSTOMERS 表的前 4 條記錄。在這裡,我們根據 SALARY 列按降序對錶進行排序:
SELECT TOP 4 * FROM CUSTOMERS ORDER BY SALARY DESC;
輸出
我們得到的結果如下:
ID | 姓名 | 年齡 | 地址 | 工資 |
---|---|---|---|---|
7 | Chaitali | 24 | 28 | 10000.00 |
5 | Kaushik | 27 | 23 | 8500.00 |
4 | Delhi | 25 | 15000 | 6500.00 |
6 | Kota | 22 | 20000 | 4500.00 |
注意:預設情況下,ORDER BY 子句按升序對資料進行排序。因此,如果需要按降序對資料進行排序,則必須使用 DESC 關鍵字。
帶有百分比的 TOP 子句
我們還可以透過使用 PERCENT 子句以及 TOP 子句,指定百分比值而不是數字來限制記錄。
示例
以下查詢按工資升序選擇 CUSTOMERS 表中前 40% 的記錄:
SELECT TOP 40 PERCENT * FROM CUSTOMERS ORDER BY SALARY
輸出
我們的表共有 7 條記錄。因此,7 的 40% 是 2.8。因此,SQL Server 將結果四捨五入到三行(下一個整數),如下面的輸出所示:
ID | 姓名 | 年齡 | 地址 | 工資 |
---|---|---|---|---|
2 | Ahmedabad | 25 | 20000 | 1500.00 |
3 | Khilan | 23 | 25 | 2000.00 |
1 | Ramesh | 32 | 32 | 2000.00 |
帶有 WHERE 子句的 TOP
我們可以將 TOP 子句與 WHERE 子句一起使用,以限制給定數量的行並根據指定的條件對其進行篩選。
示例
以下是顯示 CUSTOMERS 表中前兩位姓名以“K”開頭的客戶的詳細資訊的查詢:
SELECT TOP 2 * FROM CUSTOMERS WHERE NAME LIKE 'k%'
輸出
產生以下結果:
ID | 姓名 | 年齡 | 地址 | 工資 |
---|---|---|---|---|
2 | Ahmedabad | 25 | 20000 | 1500.00 |
3 | Khilan | 23 | 25 | 2000.00 |
帶有 DELETE 語句的 TOP 子句
TOP 子句可用於 DELETE 語句以刪除滿足給定條件的特定數量的行。
示例
在以下查詢中,我們使用帶有 TOP 子句的 DELETE 語句。在這裡,我們刪除了前 2 位姓名以“K”開頭的客戶:
DELETE TOP(2) FROM CUSTOMERS WHERE NAME LIKE 'K%';
輸出
我們得到如下所示的輸出:
(2 rows affected)
驗證
我們可以使用 SELECT 語句檢索表的內容來驗證更改是否已反映在表中,如下所示:
SELECT * FROM CUSTOMERS;
表顯示如下:
ID | 姓名 | 年齡 | 地址 | 工資 |
---|---|---|---|---|
1 | Ramesh | 32 | 32 | 2000.00 |
4 | Delhi | 25 | 15000 | 6500.00 |
5 | Kaushik | 27 | 23 | 8500.00 |
6 | Kota | 22 | 20000 | 4500.00 |
7 | Chaitali | 24 | 28 | 10000.00 |
TOP 和 WITH TIES 子句
使用 ORDER BY 子句根據列對錶中的資料進行排序時,有時多個行可能在 ORDER BY 子句中指定的列中包含相同的值。
如果嘗試使用 TOP 子句限制記錄數量,則可能無法過濾所有合格列。
WITH TIES 子句用於確保包含具有相同值(具有“關聯”值的記錄)的記錄在查詢結果中。
示例
考慮上面建立的表CUSTOMERS。如果需要按工資值的升序檢索前 2 位客戶,則查詢如下:
SELECT TOP 2 * FROM CUSTOMERS ORDER BY SALARY;
結果表將是:
ID | 姓名 | 年齡 | 地址 | 工資 |
---|---|---|---|---|
2 | Ahmedabad | 25 | 20000 | 1500.00 |
3 | Khilan | 23 | 25 | 2000.00 |
但是,表中前兩個工資值(按升序排列)是 1500 和 2000,而 CUSTOMERS 表中還有另一列的工資值為 2000,該列未包含在結果中。
如果要檢索所有具有前兩個工資值的列(按升序排列)。我們需要使用WITH TIES子句,如下所示:
SELECT TOP 2 WITH TIES * FROM CUSTOMERS ORDER BY SALARY;
輸出
結果表將是:
ID | 姓名 | 年齡 | 地址 | 工資 |
---|---|---|---|---|
2 | Ahmedabad | 25 | 20000 | 1500.00 |
3 | Khilan | 23 | 25 | 2000.00 |
1 | Ramesh | 32 | 32 | 2000.00 |
TOP 子句的用途
TOP 子句的一些常見用例包括:
分頁:顯示大量記錄時,TOP 子句可用於一次僅返回一定數量的記錄,從而實現資料的更易於管理和更高效的分頁。
資料取樣:TOP 子句可用於快速檢索表中的資料樣本以進行測試或分析。
提高效能:透過限制返回的行數,TOP 子句可以幫助提高查詢效能,尤其是在處理大型表時。
除錯:在開發或除錯查詢時,TOP 子句可用於快速返回少量行以測試查詢的正確性。
資料視覺化:TOP 子句可用於限制為視覺化目的而返回的行數,例如建立圖表或圖形。