Kodokon kodokon.com

排序与去重:ORDER BY、LIMIT、DISTINCT

掌握用 ORDER BY 对结果排序、用 LIMIT 限制行数,以及用 DISTINCT 去除重复项。

6 分钟 · 3 题

在 Kodokon 中打开本课

默认情况下,SELECT 返回的行的顺序是没有保证的:数据库怎么方便就怎么返回。要强制指定一个顺序,可以加上 ORDER BY,后面跟一个列。排序默认是升序的(你可以用 ASC 把它写明确);要降序排序就加上 DESC

SQL
SELECT title, price FROM books ORDER BY price;

SELECT title, price FROM books ORDER BY price DESC;
从最便宜到最贵,然后反过来

你可以按多个列排序:ORDER BY genre, price DESC 先按 genre 排序,然后在同一个 genre 内部,从最贵到最便宜排序。LIMIT 子句只保留结果的前 N 行:与 ORDER BY 结合使用时,它能给你一个 "前 N 名"。LIMIT 3 OFFSET 2 则会额外跳过前 2 行。

SQL
SELECT title, price FROM books
ORDER BY price DESC
LIMIT 3;
最贵的前 3 本书

最后一个工具:DISTINCT,放在 SELECT 的紧后面,会从结果中去除重复项。我们的表里有 7 本书,但只有 3 种不同的 genre:如果没有 DISTINCT,下面的查询会显示带重复的 7 行。

SQL
SELECT DISTINCT genre FROM books;

SELECT DISTINCT author FROM books;
3 个不重复的 genre,然后是 6 个不重复的作者

知识检测

确认你已牢记本课的重点内容。

  1. 如何把书从最贵到最便宜排序?
    • ORDER BY price
    • ORDER BY price DESC
    • SORT BY price DESC
  2. 在我们的表上,SELECT DISTINCT genre FROM books; 会返回什么?
    • 7 个 genre,每本书一个
    • 每个 genre 只出现一次,即 3 行
    • 出现次数最多的 genre
  3. 在没有 ORDER BY 的情况下使用 LIMIT 5 会返回什么?
    • 最近的 5 行
    • 顺序无法保证的 5 行
    • 一个语法错误