Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

MySQL không có SELECT TOP – dùng LIMIT thay thế

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 ServerMySQL
SELECT TOP(2) * FROM bang ORDER BY Age DESCSELECT * 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 BY với LIMIT để kết quả xác định.
  • LIMIT 2 OFFSET 0 cú pháp chuẩn SQL:2008 (MySQL 8.0+ hỗ trợ).
  • Phân trang: LIMIT offset, count hoặc LIMIT count OFFSET offset.