SELECT入门
检索数据、去重、限制行数、写注释
一条最简单的 SELECT
假设你有一张 users 表,里面有 id、name、age、city、salary 五列。现在想看一眼所有人的名字,怎么写?
SELECT name FROM users;这就是最核心的 SQL 语法:SELECT 列名 FROM 表名。
SELECT— 告诉 MySQL "我要查东西"name— 要查的列FROM users— 从哪张表里查
结果:
+--------+
| name |
+--------+
| 张三 |
| 李四 |
| 王五 |
| ... |
+--------+简单到不需要更多解释。接下来我们在这句话的基础上逐步加料。
检索多列
想一次查名字和年龄?列名之间用逗号隔开:
SELECT name, age FROM users;+--------+------+
| name | age |
+--------+------+
| 张三 | 25 |
| 李四 | 30 |
| 王五 | 28 |
| ... | ... |
+--------+------+列的顺序完全由你定,想怎么排就怎么排:
SELECT city, name, salary FROM users;💡 注意:最后一个列名后面不要加逗号,
SELECT name, age, FROM users会报错。
检索所有列
懒人专属——不想敲列名就用 *:
SELECT * FROM users;* 是通配符,代表"所有列,按表定义的顺序返回"。
优点:省事,不知道有什么列时可以先用 * 看一眼。
坑:
- 表有 100 列但只需要 3 列,
*也会把所有列都捞出来,浪费传输 - 表的列顺序变了,代码可能会出问题
⚠️ 生产环境少用
SELECT *,写代码时明确指定需要的列,后期维护会少很多麻烦。
去掉重复行:DISTINCT
查一下公司员工都在哪些城市:
SELECT city FROM users;+--------+
| city |
+--------+
| 北京 |
| 上海 |
| 广州 |
| 深圳 |
| 北京 | ← 重复
| 上海 | ← 重复
| 杭州 |
| 北京 | ← 重复
+--------+8 个人但只分布在 5 个城市,"北京"出现了 3 次。想去掉重复,加一个 DISTINCT:
SELECT DISTINCT city FROM users;+--------+
| city |
+--------+
| 北京 |
| 上海 |
| 广州 |
| 深圳 |
| 杭州 |
+--------+干净了。
⚠️
DISTINCT作用于所有列的组合。SELECT DISTINCT city, name的意思是"城市 + 名字的组合不重复",不是"只看城市不重复"。
只要前N行:LIMIT
表里有 8 行,暂时只想看前 3 行?
SELECT name, age FROM users LIMIT 3;+--------+------+
| name | age |
+--------+------+
| 张三 | 25 |
| 李四 | 30 |
| 王五 | 28 |
+--------+------+还可以指定从第几行开始拿。比如从第 4 行开始,拿 2 行:
SELECT name, age FROM users LIMIT 3, 2;3— 跳过前 3 行(行号从 0 开始计数,所以跳过的是 0、1、2)2— 取 2 行
+--------+------+
| name | age |
+--------+------+
| 赵六 | 35 |
| 孙七 | 22 |
+--------+------+MySQL 也支持另一种更直观的写法(推荐):
SELECT name, age FROM users LIMIT 2 OFFSET 3;LIMIT 2 OFFSET 3 — 跳过 3 行,取 2 行。含义一目了然。
💡 分页查询就是靠
LIMIT实现的。比如每页 10 条,第 1 页LIMIT 0, 10,第 2 页LIMIT 10, 10,第 3 页LIMIT 20, 10……
使用注释
写复杂 SQL 时,加注释是给自己和别人看的备忘录。MySQL 支持两种注释:
-- 这是单行注释,查询北京的用户
SELECT name, city
FROM users
WHERE city = '北京'; -- WHERE 后面会讲,先不纠结
/*
这是多行注释
可以写很多行
2024年6月13日 张三写的
*/
SELECT DISTINCT city FROM users;如果想让 MySQL 完全不执行某条语句但不删除它,注释掉就行——调试时常用。
小结
这章学会了最核心的 SQL 操作——查数据,记住五件事:
SELECT 列 FROM 表— 检索的固定句式,列用逗号隔开DISTINCT去重 — 作用于所有列的组合,不是只看第一列LIMIT控制行数 — 分页就是靠它,LIMIT N OFFSET M最直观SELECT *慎用 — 快速看一眼可以,写代码时明确指定列- 注释是好习惯 —
--单行,/* */多行,复杂 SQL 给自己留备忘
💡 SELECT 是整个 SQL 的根基,后面所有章节都是在这句话上加料。把上面五个操作跑熟了,下一章加筛选条件。
自主练习
用 users 表试试这些操作:
- 查询所有员工的 id、name、salary 三列
- 查询公司都在哪些城市有员工(不重复)
- 查询前 5 个员工的全部信息
- 从第 3 个开始,往后查 4 个人
答案自己跑跑看~下一章我们学习怎么加条件筛选,比如"查所有北京的员工"。