Hướng dẫn SQL Server này giải thích cách sử dụng câu lệnh SELECT TOP trong SQL Server (Transact-SQL) với cú pháp và ví dụ
Sự miêu tả
Câu lệnh SELECT TOP của SQL Server (Transact-SQL) được sử dụng để truy xuất các bản ghi từ một hoặc nhiều bảng trong SQL Server và giới hạn số lượng bản ghi được trả về dựa trên một giá trị cố định hoặc tỷ lệ phần trăm
cú pháp
Cú pháp của câu lệnh SELECT TOP trong SQL Server (Transact-SQL) là
SELECT TOP (top_value) [ PERCENT ] [ WITH TIES ] expressions FROM tables [WHERE conditions] [ORDER BY expression [ ASC | DESC ]];Tham số hoặc Đối số
TOP (top_value)Trả về số hàng trên cùng trong tập kết quả dựa trên top_value. Ví dụ: TOP(10) sẽ trả về 10 hàng trên cùng từ tập hợp kết quả đầy đủ. PERCENTTùy chọn. Nếu PERCENT được chỉ định, thì các hàng trên cùng dựa trên tỷ lệ phần trăm của tổng số tập hợp kết quả (như được chỉ định bởi top_value). Ví dụ: TOP(10) PERCENT sẽ trả về 10% hàng đầu của tập hợp kết quả đầy đủ. CÓ CÀ VẶTTùy chọn. Nếu mệnh đề VỚI TIES được chỉ định, thì các hàng được gắn ở vị trí cuối cùng trong tập kết quả giới hạn sẽ được trả về. Điều này có thể dẫn đến nhiều hàng được trả về hơn mức cho phép của tham số TOP. biểu thứcCác cột hoặc phép tính mà bạn muốn truy xuất. tableCác bảng mà bạn muốn truy xuất các bản ghi từ. Phải có ít nhất một bảng được liệt kê trong mệnh đề TỪ. điều kiện WHERETùy chọn. Các điều kiện phải được đáp ứng để hồ sơ được chọn. ĐẶT HÀNG BẰNG biểu thứcTùy chọn. Nó được sử dụng trong câu lệnh CHỌN HÀNG ĐẦU để bạn có thể sắp xếp các kết quả và nhắm mục tiêu những bản ghi mà bạn muốn trả về. ASC là thứ tự tăng dần và DESC là thứ tự giảm dầnVí dụ - Sử dụng từ khóa TOP
Hãy xem một ví dụ về SQL Server, nơi chúng ta sử dụng từ khóa TOP trong câu lệnh SELECT
Ví dụ
SELECT TOP(5) employee_id, last_name, first_name FROM employees WHERE last_name = 'Anderson' ORDER BY employee_id;Ví dụ SQL Server SELECT TOP này sẽ chọn 5 bản ghi đầu tiên từ bảng nhân viên trong đó tên_cuối là 'Anderson'. Nếu có các bản ghi khác trong bảng nhân viên có last_name là 'Anderson', chúng sẽ không được trả về bởi câu lệnh SELECT
Bạn có thể sửa đổi ví dụ này để bao gồm mệnh đề VỚI TIES như sau
SELECT TOP(5) WITH TIES employee_id, last_name, first_name FROM employees WHERE last_name = 'Anderson' ORDER BY employee_id;Mệnh đề VỚI RÀNG BUỘC sẽ bao gồm các hàng có thể được gắn ở vị trí cuối cùng trong tập kết quả giới hạn. Vì vậy, nếu vị trí cuối cùng trong tập bản ghi SELECT TOP(10) PERCENT là hòa, thì các bản ghi hòa này sẽ được trả về bởi câu lệnh SELECT TOP. Điều này sẽ dẫn đến hơn 10% toàn bộ bộ bản ghi được trả về
Khả năng chọn một tỷ lệ phần trăm bản ghi nhất định từ truy vấn hoặc bảng cơ sở dữ liệu có thể quan trọng khi làm việc với nhiều dữ liệu. May mắn thay, điều này rất dễ thực hiện trong MySQL với hàm RAND() và mệnh đề WHERE
RAND() trả về một số dấu phẩy động ngẫu nhiên trong khoảng từ 0 đến 1, giúp dễ dàng chọn một tỷ lệ phần trăm nhất định của tất cả các bản ghi được trả về từ một truy vấn. Ví dụ: nếu bạn muốn chọn khoảng 5% của tất cả các bản ghi, hãy sử dụng WHERE RAND() < 0.05. Khoảng 25% hồ sơ sử dụng WHERE RAND() < 0.25, v.v.
Dưới đây là một ví dụ về việc chọn 1% của tất cả các bản ghi từ bảng my_data. Bảng này chứa 1000 bản ghi, vì vậy truy vấn này sẽ trả về khoảng 10
Trong một số trường hợp, bạn có thể không quan tâm đến tất cả các hàng được truy vấn trả về, ví dụ: nếu bạn chỉ muốn truy xuất 10 nhân viên hàng đầu mới gia nhập tổ chức, lấy 3 sinh viên hàng đầu theo điểm số hoặc đại loại như vậy
Để xử lý những tình huống như vậy, bạn có thể sử dụng mệnh đề TOP của SQL trong câu lệnh -- Syntax for SQL Server Database SELECT TOP 3 * FROM employees ORDER BY salary DESC;0 của mình. Tuy nhiên, mệnh đề TOP chỉ được hỗ trợ bởi hệ thống cơ sở dữ liệu SQL Server và MS Access
MySQL cung cấp mệnh đề -- Syntax for SQL Server Database SELECT TOP 3 * FROM employees ORDER BY salary DESC;2 tương đương, trong khi Oracle cung cấp mệnh đề -- Syntax for SQL Server Database SELECT TOP 3 * FROM employees ORDER BY salary DESC;3 cho câu lệnh -- Syntax for SQL Server Database SELECT TOP 3 * FROM employees ORDER BY salary DESC;0 để hạn chế số lượng hàng được trả về bởi một truy vấn
SQL HÀNG ĐẦU Cú pháp
Mệnh đề SQL TOP được sử dụng để giới hạn số hàng được trả về. Cú pháp cơ bản của nó là
CHỌN HÀNG ĐẦU -- Syntax for SQL Server Database SELECT TOP 3 * FROM employees ORDER BY salary DESC;6. -- Syntax for SQL Server Database SELECT TOP 3 * FROM employees ORDER BY salary DESC;7 -- Syntax for SQL Server Database SELECT TOP 3 * FROM employees ORDER BY salary DESC;8 TỪ -- Syntax for SQL Server Database SELECT TOP 3 * FROM employees ORDER BY salary DESC;9;
Ở đây, column_list là danh sách các tên cột hoặc trường được phân tách bằng dấu phẩy của một bảng cơ sở dữ liệu (e. g. tên, tuổi, quốc gia, v.v. ) có giá trị bạn muốn tìm nạp. Hãy xem nó hoạt động như thế nào
Giả sử chúng tôi có một bảng nhân viên trong cơ sở dữ liệu của mình với các bản ghi sau
+--------+--------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 1 | Ethan Hunt | 2001-05-01 | 5000 | 4 | | 2 | Tony Montana | 2002-07-15 | 6500 | 1 | | 3 | Sarah Connor | 2005-10-18 | 8000 | 5 | | 4 | Rick Deckard | 2007-01-03 | 7200 | 3 | | 5 | Martin Blank | 2008-06-24 | 5600 | NULL | +--------+--------------+------------+--------+---------+Câu lệnh sau đây trả về ba nhân viên được trả lương cao nhất từ bảng nhân viên
-- Syntax for SQL Server Database SELECT TOP 3 * FROM employees ORDER BY salary DESC;
Tập kết quả trả về sẽ giống như thế này
+--------+--------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 3 | Sarah Connor | 2005-10-18 | 8000 | 5 | | 4 | Rick Deckard | 2007-01-03 | 7200 | 3 | | 2 | Tony Montana | 2002-07-15 | 6500 | 1 | +--------+--------------+------------+--------+---------+Bạn có thể tùy chọn sử dụng từ khóa +--------+--------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 3 | Sarah Connor | 2005-10-18 | 8000 | 5 | | 4 | Rick Deckard | 2007-01-03 | 7200 | 3 | | 2 | Tony Montana | 2002-07-15 | 6500 | 1 | +--------+--------------+------------+--------+---------+ 0 sau giá trị cố định trong mệnh đề TOP, nếu bạn chỉ muốn truy xuất phần trăm số hàng thay vì số lượng hàng cố định. Các giá trị phân số được làm tròn lên đến giá trị số nguyên tiếp theo (e. g. 1. 5 làm tròn thành 2)
Câu lệnh sau trả về top 30% nhân viên được trả lương cao nhất
-- Syntax for SQL Server Database SELECT TOP 30 PERCENT * FROM employees ORDER BY salary DESC;
Tập kết quả được trả về bởi truy vấn trên sẽ như thế này
+--------+--------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 3 | Sarah Connor | 2005-10-18 | 8000 | 5 | | 4 | Rick Deckard | 2007-01-03 | 7200 | 3 | +--------+--------------+------------+--------+---------+Cú pháp GIỚI HẠN MySQL
Mệnh đề -- Syntax for SQL Server Database SELECT TOP 3 * FROM employees ORDER BY salary DESC;2 của MySQL thực hiện công việc tương tự như mệnh đề TOP của SQL. Cú pháp cơ bản của nó là
CHỌN -- Syntax for SQL Server Database SELECT TOP 3 * FROM employees ORDER BY salary DESC;8 TỪ -- Syntax for SQL Server Database SELECT TOP 3 * FROM employees ORDER BY salary DESC;9 SỐ GIỚI HẠN;
Câu lệnh sau đây trả về ba nhân viên được trả lương cao nhất từ bảng nhân viên
-- Syntax for MySQL Database SELECT * FROM employees ORDER BY salary DESC LIMIT 3;
Sau khi thực hiện, bạn sẽ nhận được kết quả như thế này
+--------+--------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 3 | Sarah Connor | 2005-10-18 | 8000 | 5 | | 4 | Rick Deckard | 2007-01-03 | 7200 | 3 | | 2 | Tony Montana | 2002-07-15 | 6500 | 1 | +--------+--------------+------------+--------+---------+Ghi chú. Trong câu lệnh -- Syntax for SQL Server Database SELECT TOP 3 * FROM employees ORDER BY salary DESC;0, luôn sử dụng mệnh đề +--------+--------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 3 | Sarah Connor | 2005-10-18 | 8000 | 5 | | 4 | Rick Deckard | 2007-01-03 | 7200 | 3 | | 2 | Tony Montana | 2002-07-15 | 6500 | 1 | +--------+--------------+------------+--------+---------+ 7 với mệnh đề -- Syntax for SQL Server Database SELECT TOP 3 * FROM employees ORDER BY salary DESC;2. Nếu không, bạn có thể không nhận được kết quả mong muốn
Đặt Row Offset trong LIMIT khoản
Mệnh đề -- Syntax for SQL Server Database SELECT TOP 3 * FROM employees ORDER BY salary DESC;2 chấp nhận tham số thứ hai tùy chọn
Khi hai tham số được chỉ định, tham số đầu tiên chỉ định phần bù của hàng đầu tiên để trả về i. e. điểm bắt đầu, trong khi tham số thứ hai chỉ định số hàng tối đa sẽ trả về. Phần bù của hàng ban đầu là -- Syntax for SQL Server Database SELECT TOP 30 PERCENT * FROM employees ORDER BY salary DESC;0 (không phải -- Syntax for SQL Server Database SELECT TOP 30 PERCENT * FROM employees ORDER BY salary DESC;1)