数据存在数据库里,如果拿不出来、看不明白,它就只是一堆躺着的字节。这一章教你用 SELECT 把数据「叫醒」——取哪几列、怎么去重、按什么条件筛、怎么排序、怎么只取前几条。学完这几句,你就能自己从「古典文学网」的库里翻出想要的任何一篇作品。
SELECT id, title, author, dynasty FROM article;
SELECT title AS 作品, author AS 作者, views AS 浏览量
FROM article;
-- 不去重:每篇作品都带出一个朝代,「唐」出现了三次
SELECT dynasty FROM article;
-- 去重:同一朝代只留一条
SELECT DISTINCT dynasty FROM article;
SELECT title, author, dynasty
FROM article
WHERE dynasty = '唐';
SELECT title, author, views
FROM article
ORDER BY views DESC;
SELECT title, author, views
FROM article
ORDER BY views DESC
LIMIT 3;
再加一个 OFFSET,就能「跳过前几条、从第几条开始取」——这正是分页的底层原理:
-- 跳过前 2 条,再取 2 条(相当于「第 2 页,每页 2 条」)
SELECT id, title
FROM article
ORDER BY id
LIMIT 2 OFFSET 2;
「古典文学网」首页与列表页背后,其实就是下面这三类查询。用本章的知识,你已经能独立写出来了。
-- ① 首页推荐位:推荐作品,按浏览量降序
SELECT id, title, author
FROM article
WHERE is_recommend = 1
ORDER BY views DESC;
-- ② 点「唐诗」分类:只看唐朝作品,热门在前
SELECT title, author, views
FROM article
WHERE dynasty = '唐'
ORDER BY views DESC;
-- ③ 列表分页:按发布顺序倒序,每页 3 条,取第 1 页
SELECT id, title, author
FROM article
ORDER BY id DESC
LIMIT 3;
-- 第 1 题
SELECT title, author FROM article WHERE dynasty = '宋';
-- 第 2 题
SELECT title, views FROM article ORDER BY views DESC LIMIT 2;
-- 第 3 题(红影赏析,表结构不同,思路完全一致)
SELECT title, rating FROM movie WHERE genre = '科幻' ORDER BY rating DESC;
第 3 题的关键:换的是「表名和字段名」,不变的是「WHERE 筛条件 + ORDER BY 排序」这套骨架。能把它迁移过去,说明你真懂了。