Làm quen với lệnh SELECT TOP trong SQL

Trong SQL, lệnh SELECT TOP là một công cụ quan trọng để lấy ra một số bản ghi hoặc một phần trăm bản ghi từ một bảng dữ liệu. Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về cách sử dụng lệnh TOP trong SQL, với cú pháp và ví dụ cụ thể giúp bạn hiểu rõ hơn và áp dụng linh hoạt hơn.

Lệnh SELECT TOP rất hữu ích khi làm việc với các bảng dữ liệu lớn, chứa hàng nghìn bản ghi. Việc trả về một số lượng lớn bản ghi có thể ảnh hưởng đến hiệu suất của hệ thống.

Cú pháp lệnh TOP trong SQL

Trước tiên, chúng ta cần biết cú pháp lệnh TOP trong các hệ quản trị cơ sở dữ liệu phổ biến như SQL Server, MS Access, MySQL và Oracle.

SQL Server / MS Access

SELECT TOP so_ban_ghi | phan_tram ten_cot (có thể nhiều cột) FROM ten_bang WHERE [dieu_kien]

MySQL

SELECT ten_cot (có thể nhiều cột) FROM ten_bang WHERE [dieu_kien] LIMIT so_luong;

Oracle 12

SELECT ten_cot (có thể nhiều cột) FROM ten_bang ORDER BY ten_cot (có thể nhiều cột) FETCH FIRST so_luong ROWS ONLY;

Oracle cũ

SELECT ten_cot (có thể nhiều cột) FROM ten_bang WHERE ROWNUM <= so_luong;
SELECT * FROM (SELECT ten_cot(s) FROM ten_bang ORDER BY ten_cot) WHERE ROWNUM <= so_luong;

Ví dụ về lệnh TOP, LIMIT và FETCH FIRST

Hãy giả sử chúng ta có bảng NHANVIEN với các bản ghi như sau:

ID TEN TUOI DIACHI LUONG
1 Thanh 32 Haiphong 2000.00
2 Loan 25 Hanoi 1500.00
3 Nga 23 Hanam 2000.00
4 Manh 25 Hanoi 6500.00
5 Huy 27 Hanoi 8500.00
6 Cao 22 HCM 4500.00
7 Lam 24 Hanoi 10000.00

Nếu chúng ta muốn lấy danh sách 3 nhân viên đầu tiên trong bảng NHANVIEN, chúng ta có thể sử dụng các câu lệnh tương ứng như sau:

Trên SQL Server/MS Access:

SELECT TOP 3 * FROM NHANVIEN;

Trên MySQL:

SELECT * FROM NHANVIEN LIMIT 3;

Trên Oracle:

SELECT * FROM NHANVIEN FETCH FIRST 3 ROWS ONLY;

hoặc

SELECT * FROM NHANVIEN WHERE ROWNUM <= 3;

Kết quả trả về sẽ là:

ID TEN TUOI DIACHI LUONG
1 Thanh 32 Haiphong 2000.00
2 Loan 25 Hanoi 1500.00
3 Nga 23 Hanam 2000.00

Ví dụ về lệnh TOP PERCENT

Giả sử chúng ta muốn hiển thị danh sách 50% nhân viên đầu tiên trong bảng NHANVIEN. Cú pháp tương ứng sẽ là:

Trên SQL Server/MS Access:

SELECT TOP 50 PERCENT * FROM NHANVIEN;

Trên Oracle:

SELECT * FROM NHANVIEN FETCH FIRST 50 PERCENT ROWS ONLY;

Cả hai câu lệnh trên sẽ trả về kết quả như sau:

ID TEN TUOI DIACHI LUONG
1 Thanh 32 Haiphong 2000.00
2 Loan 25 Hanoi 1500.00
3 Nga 23 Hanam 2000.00
4 Manh 25 Hanoi 6500.00

Ví dụ TOP kết hợp với WHERE

Giả sử chúng ta muốn tìm 3 nhân viên đầu tiên trong bảng NHANVIEN có địa chỉ tại Hanoi. Câu lệnh tương ứng sẽ là:

Trên SQL Server/MS Access:

SELECT TOP 3 * FROM NHANVIEN WHERE DIACHI='Hanoi';

Trên MySQL:

SELECT * FROM NHANVIEN WHERE DIACHI='Hanoi' LIMIT 3;

Trên Oracle:

SELECT * FROM NHANVIEN WHERE DIACHI='Hanoi' FETCH FIRST 3 ROWS ONLY;

Trong phần tiếp theo, chúng ta sẽ tìm hiểu về câu lệnh ORDER BY, hãy tiếp tục theo dõi nhé.