Tóm tắt
MySQL **không hỗ trợ** SELECT TOP n (cú pháp SQL Server). Thay bằng LIMIT n sau ORDER BY.
So sánh
| SQL Server | MySQL |
|---|---|
SELECT TOP(2) * FROM bang ORDER BY Age DESC | SELECT * FROM bang ORDER BY Age DESC LIMIT 2 |
SELECT TOP(10) PERCENT * FROM bang | -- Không có trực tiếp, dùng biến |
SELECT TOP(2) WITH TIES * FROM bang ORDER BY Age DESC | -- Không có trực tiếp, dùng window function |
Ví dụ
1. Tạo bảng
CREATE TABLE Top2Demo (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(20),
Age INT
);
INSERT INTO Top2Demo (Name, Age) VALUES
('Larry',23), ('Bob',21), ('Sam',19), ('David',25), ('Carol',22);
2. Lấy 2 người lớn tuổi nhất
SELECT * FROM Top2Demo ORDER BY Age DESC LIMIT 2;
3. Kết quả
+----+-------+------+
| Id | Name | Age |
+----+-------+------+
| 4 | David | 25 |
| 1 | Larry | 23 |
+----+-------+------+
Mở rộng: TOP PERCENT trong MySQL
-- Lấy 10% hàng đầu theo Age
SET @n = (SELECT CEIL(COUNT(*) * 0.1) FROM Top2Demo);
PREPARE stmt FROM 'SELECT * FROM Top2Demo ORDER BY Age DESC LIMIT ?';
EXECUTE stmt USING @n;
MySQL 8.0: WITH TIES (FETCH FIRST ... WITH TIES)
SELECT * FROM Top2Demo ORDER BY Age DESC FETCH FIRST 2 ROWS WITH TIES;
-- Bao gồm các hàng đồng hạng với hàng thứ 2
Lưu ý
- Luôn dùng
ORDER BYvới LIMIT để kết quả xác định. LIMIT 2 OFFSET 0cú pháp chuẩn SQL:2008 (MySQL 8.0+ hỗ trợ).- Phân trang:
LIMIT offset, counthoặcLIMIT count OFFSET offset.