SQL LIMIT 语句
最后修改于 2025 年 2 月 25 日
SQL LIMIT 语句用于限制查询返回的行数。当处理大型数据集并且只需要结果的子集时,它特别有用。本教程将通过实际示例介绍如何使用 LIMIT 语句。
LIMIT 子句通常与 ORDER BY 子句结合使用,以根据特定列检索最高或最低的记录。
设置数据库
首先,让我们创建 books 表并插入示例数据。
-- Create the books table
CREATE TABLE books (
book_id INTEGER PRIMARY KEY,
title VARCHAR(100) NOT NULL,
author VARCHAR(100) NOT NULL,
genre VARCHAR(50) NOT NULL,
price NUMERIC(5,2) NOT NULL CHECK (price >= 0),
publication_year INTEGER NOT NULL CHECK (publication_year BETWEEN 1900 AND 2025)
);
-- Insert 30 sample book entries
INSERT INTO books (book_id, title, author, genre, price, publication_year) VALUES
(101, 'The Silent Forest', 'Jane Doe', 'Mystery', 12.99, 2020),
(102, 'Code of Tomorrow', 'John Smith', 'Sci-Fi', 15.50, 2022),
(103, 'Cooking Basics', 'Maria Lopez', 'Non-Fiction', 9.99, 2019),
(104, 'Whispers in the Dark', 'Emily Carter', 'Horror', 13.75, 2021),
(105, 'The Last Empire', 'Robert King', 'Fantasy', 18.99, 2018),
(106, 'Data Driven', 'Alex Chen', 'Non-Fiction', 22.00, 2023),
(107, 'Echoes of Time', 'Sarah Miles', 'Sci-Fi', 14.25, 2020),
(108, 'The Red Shadow', 'Tom Harris', 'Thriller', 11.50, 2017),
(109, 'Garden of Dreams', 'Lily Evans', 'Romance', 8.99, 2022),
(110, 'Quantum Leap', 'David Patel', 'Sci-Fi', 16.80, 2024),
(111, 'Broken Chains', 'Anna Reed', 'Historical', 17.45, 2015),
(112, 'The Hungry Flame', 'Mark Stone', 'Fantasy', 19.99, 2021),
(113, 'Simple Joys', 'Clara White', 'Self-Help', 10.25, 2019),
(114, 'Nightmare City', 'Greg Holt', 'Horror', 12.60, 2023),
(115, 'Love in Bloom', 'Sophie Bell', 'Romance', 7.99, 2020),
(116, 'The Codebreaker', 'James Fox', 'Thriller', 14.99, 2018),
(117, 'Stars Unseen', 'Rachel Kim', 'Sci-Fi', 15.75, 2022),
(118, 'The Lost Recipe', 'Elena Ortiz', 'Non-Fiction', 11.20, 2016),
(119, 'Winds of Fate', 'Henry Blake', 'Fantasy', 20.50, 2023),
(120, 'Silent Witness', 'Laura Dean', 'Mystery', 13.30, 2019),
(121, 'Beyond the Veil', 'Chris Ward', 'Horror', 14.00, 2021),
(122, 'The Art of Calm', 'Nina Patel', 'Self-Help', 9.50, 2020),
(123, 'Empire of Dust', 'Oliver Grant', 'Historical', 18.25, 2014),
(124, 'Twist of Trust', 'Kate Lynn', 'Thriller', 12.85, 2022),
(125, 'Heartstrings', 'Emma Rose', 'Romance', 8.75, 2023),
(126, 'The Infinite Loop', 'Sam Carter', 'Sci-Fi', 16.99, 2024),
(127, 'Bread & Soul', 'Luis Gomez', 'Non-Fiction', 10.85, 2018),
(128, 'Dragon's Breath', 'Tara Hill', 'Fantasy', 21.00, 2020),
(129, 'The Locked Door', 'Peter Shaw', 'Mystery', 11.95, 2021),
(130, 'Mind Over Matter', 'Vikram Singh', 'Self-Help', 13.50, 2022);
books 表使用 book_id、title、author、genre、price 和 publication_year 列创建。PRIMARY KEY、NOT NULL 和 CHECK 等约束确保数据完整性。
LIMIT 的基本用法
此示例演示了如何从 books 表中检索前 5 本书。
SELECT * FROM books LIMIT 5;
LIMIT 5 子句将查询限制为仅从表中返回前 5 行。
LIMIT 与 ORDER BY
此示例检索 5 本最昂贵的书
SELECT * FROM books ORDER BY price DESC LIMIT 5;
ORDER BY price DESC 子句按价格降序对书籍进行排序,LIMIT 5 返回前 5 条结果。
LIMIT 与 OFFSET
此示例检索前 5 本书之后的下一批 5 本书
SELECT * FROM books LIMIT 5 OFFSET 5;
OFFSET 5 子句跳过前 5 行,LIMIT 5 返回接下来的 5 行。
LIMIT 与 WHERE
此示例检索“科幻”类别的前 3 本书
SELECT * FROM books WHERE genre = 'Sci-Fi' LIMIT 3;
WHERE 子句按类别过滤结果,LIMIT 3 返回前 3 条匹配的行。
LIMIT 与聚合
此示例检索拥有最多书籍的前 3 个类别
SELECT genre, COUNT(*) AS book_count FROM books GROUP BY genre ORDER BY book_count DESC LIMIT 3;
GROUP BY 子句按类别对结果进行分组,LIMIT 3 返回拥有最多书籍的前 3 个类别。
LIMIT 与 JOIN
此示例检索前 5 本书及其作者
SELECT books.title, books.author FROM books JOIN authors ON books.author_id = authors.id LIMIT 5;
JOIN 子句将 books 和 authors 表中的数据合并,LIMIT 5 返回前 5 行。
LIMIT 与子查询
此示例检索 3 本最昂贵的书
SELECT * FROM (
SELECT * FROM books
ORDER BY price DESC
) AS top_books
LIMIT 3;
子查询按价格降序对书籍进行排序,外部查询使用 LIMIT 3 返回前 3 条结果。
LIMIT 与 DISTINCT
此示例检索前 5 位不同的作者
SELECT DISTINCT author FROM books LIMIT 5;
DISTINCT 子句确保仅返回唯一的作者,LIMIT 5 将结果限制为前 5 位唯一的作者。
LIMIT 与 UNION
此示例从两个不同的表中检索前 5 本书
SELECT title, author FROM books UNION SELECT title, author FROM old_books LIMIT 5;
UNION 子句合并来自两个表的查询结果,LIMIT 5 从合并后的结果中返回前 5 行。
LIMIT 与窗口函数
此示例按价格检索每个类别的前 3 本书
SELECT * FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY genre ORDER BY price DESC) AS rank
FROM books
) AS ranked_books
WHERE rank <= 3;
ROW_NUMBER() 窗口函数按价格为每个类别中的书籍排名,外部查询进行过滤以仅返回每个类别的前 3 本书。
使用 LIMIT 的最佳实践
- 与 ORDER BY 一起使用: 始终与
ORDER BY一起使用LIMIT,以确保结果可预测。 - 与 OFFSET 结合使用: 在处理大型数据集时,使用
OFFSET对结果进行分页。 - 优化性能: 使用
LIMIT减少处理的数据量并提高查询性能。 - 与子查询一起测试: 在需要时,使用子查询将
LIMIT应用于中间结果。
来源
在本文中,我们通过实际示例和最佳实践,探讨了如何使用 SQL LIMIT 语句来限制查询结果。