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ụ Show
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ápCú 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 TOPHã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
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 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 đề 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 AccessMySQL cung cấp mệnh đề 2 tương đương, trong khi Oracle cung cấp mệnh đề 3 cho câu lệnh 0 để hạn chế số lượng hàng được trả về bởi một truy vấnSQL HÀNG ĐẦU Cú phápMệnh đề SQL CHỌN HÀNG ĐẦU 6. 7 8 TỪ 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
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
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 MySQLMệnh đề 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 8 TỪ 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
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 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 đề 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ảnMệnh đề 2 chấp nhận tham số thứ hai tùy chọnKhi 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à 0 (không phải 1)
Làm cách nào để chọn 10 phần trăm hàng đầu trong MySQL?CHỌN @rows. = ROUND(COUNT(*) * 10/100) TỪ bảng ;
Làm cách nào để chọn phần trăm hàng đầu trong MySQL?Không có cú pháp TOP n PERCENT trong MySQL
Làm cách nào để có được 50 phần trăm bản ghi trong MySQL?Đại loại như thế này. . tìm tổng số bản ghi/2 giá trị đó phải được áp dụng trong mệnh đề giới hạn. SET @count = (CHỌN COUNT(*)/2 TỪ bảng); Bạn có thể sử dụng hàng đầu trong MySQL không?Lưu ý − Tất cả cơ sở dữ liệu không hỗ trợ mệnh đề TOP . Ví dụ: MySQL hỗ trợ mệnh đề LIMIT để tìm nạp số lượng bản ghi hạn chế trong khi Oracle sử dụng lệnh ROWNUM để tìm nạp một số lượng bản ghi hạn chế. |