Mệnh đề TOP, LIMIT, ROWNUM trong SQL




Mệnh đề TOP được sử dụng để lấy dữ liệu của TOP N số hoặc X phần trăm bản ghi từ một bảng.

Ghi chú: Tất cả Database không hỗ trợ mệnh đề TOP. Ví dụ, MySQL hỗ trợ mệnh đề LIMIT để lấy số bản ghi đã giới hạn và Oracle sử dụng ROWNUM để thực hiện cùng thao tác này.

Cú pháp

Cú pháp cơ bản của mệnh đề TOP với lệnh SELECT như sau:

SELECT TOP number|percent ten_cot
FROM ten_bang
WHERE [dieu_kien]

Ví dụ

Bảng SINHVIEN có các bản ghi sau:

+----+---------+-----+-----------+--------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |
+----+---------+-----+-----------+---------+
|  1 | Hoang   |  21 | CNTT      | 4       |
|  2 | Viet    |  19 | DTVT      | 3     |
|  3 | Thanh   |  18 | KTDN      |  4      |
|  4 | Nhan    |  19 | CK        |   4.5   |
|  5 | Huong   |  20 | TCNH      |   5     |
+----+---------+-----+-----------+---------+

Ví dụ sau trên SQL Server, sẽ lấy 2 bản ghi đầu tiên từ bảng này:

SQL> SELECT TOP 2 * FROM SINHVIEN;
Loading...

Ví dụ trên sẽ cho kết quả:

+----+---------+-----+-----------+--------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |
+----+---------+-----+-----------+---------+
|  1 | Hoang   |  21 | CNTT      | 4       |
|  2 | Viet    |  19 | DTVT      | 3     |
+----+---------+-----+-----------+---------+

Nếu bạn đang sử dụng MySQL Server, thì đây là một ví dụ tương đương:

SQL> SELECT * FROM SINHVIEN
LIMIT 2;

Ví dụ trên sẽ cho kết quả:

+----+---------+-----+-----------+--------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |
+----+---------+-----+-----------+---------+
|  1 | Hoang   |  21 | CNTT      | 4       |
|  2 | Viet    |  19 | DTVT      | 3     |
+----+---------+-----+-----------+---------+

Nếu bạn đang sử dụng Oracle Server, thì đây là một ví dụ tương đương:

SQL> SELECT * FROM SINHVIEN
WHERE ROWNUM <= 2;
Loading...

Ví dụ trên sẽ cho kết quả:

+----+---------+-----+-----------+--------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |
+----+---------+-----+-----------+---------+
|  1 | Hoang   |  21 | CNTT      | 4       |
|  2 | Viet    |  19 | DTVT      | 3     |
+----+---------+-----+-----------+---------+