5. 查询基础:SELECT 与 WHERE
这是什么:SELECT = 从表里取数据的语句,一行取几列由你说了算;WHERE = 跟在后面的筛选条件,只留下符合条件的行。
为什么用:数据库 80% 的日常操作都是查询——后台要看用户列表,博客要列最新文章,都得靠它。没有 WHERE,上万行数据会一股脑全砸出来。
如何用:本章从 SELECT * 写到只取某几列,再加 WHERE 过滤,最后配 ORDER BY 排序和 LIMIT 限量。
5.1 SELECT:拿到你想要的列
SELECT * FROM `user`; -- 所有列(少用,浪费)
SELECT `username`, `email` FROM `user`; -- 只要两列
SELECT `username` AS `name` FROM `user`; -- AS 起别名
SELECT DISTINCT `email` FROM `user`; -- 去重
生产里几乎不写
SELECT *,要几列取几列,理由:网络传输少、语义清楚、加列不炸代码。
5.2 WHERE:只留符合条件的行
SELECT * FROM `user` WHERE `age` > 10;
| 运算符 | 含义 | 示例 |
|---|---|---|
= > < >= <= !=/<> |
比较 | age >= 10 |
AND / OR / NOT |
组合条件 | age > 5 AND email IS NOT NULL |
IN (…) |
枚举匹配 | username IN ('frog','panda') |
LIKE |
模糊匹配 | username LIKE '%frog%' |
IS NULL / IS NOT NULL |
空值判断(不能用 = NULL) |
email IS NOT NULL |
LIKE 通配符:% 代表任意个字符,_ 代表一个字符。
5.3 排序与限量
SELECT `username`, `age`
FROM `user`
WHERE `email` IS NOT NULL
ORDER BY `age` DESC -- 降序(ASC 升序,默认)
LIMIT 3 OFFSET 0; -- 取前 3 条,从第 0 条起(分页)
分页口诀:第 n 页取 LIMIT 10 OFFSET (n-1)*10。
5.4 完整查询四件套
把学过的装进一条语句(职场顺序必须这样写):
SELECT `username`, `age` -- 1. 要哪些列
FROM `user` -- 2. 从哪张表
WHERE `age` IS NOT NULL -- 3. 先过滤行
ORDER BY `age` DESC, `id` ASC -- 4. 排序(同岁按 id 正排)
LIMIT 5; -- 5. 取几条
5.5 动手改
- 在 user 表加几条数据后,查「年龄最大的 2 人」
- 用 LIKE 找出邮箱含
frog的用户 - 查第 2 页数据(每页 2 条),算 OFFSET
5.6 小结
- 取列不贪
*;条件过滤靠 WHERE,空值用 IS NULL ORDER BY排序、LIMIT/OFFSET分页- 顺序:SELECT → FROM → WHERE → ORDER BY → LIMIT
下一章:聚合与分组 🐸