Skip to content

SELECT入门

检索数据、去重、限制行数、写注释

一条最简单的 SELECT

假设你有一张 users 表,里面有 id、name、age、city、salary 五列。现在想看一眼所有人的名字,怎么写?

sql
SELECT name FROM users;

这就是最核心的 SQL 语法:SELECT 列名 FROM 表名

  • SELECT — 告诉 MySQL "我要查东西"
  • name — 要查的列
  • FROM users — 从哪张表里查

结果:

+--------+
| name   |
+--------+
| 张三   |
| 李四   |
| 王五   |
| ...    |
+--------+

简单到不需要更多解释。接下来我们在这句话的基础上逐步加料。

检索多列

想一次查名字和年龄?列名之间用逗号隔开:

sql
SELECT name, age FROM users;
+--------+------+
| name   | age  |
+--------+------+
| 张三   |   25 |
| 李四   |   30 |
| 王五   |   28 |
| ...    |  ... |
+--------+------+

列的顺序完全由你定,想怎么排就怎么排:

sql
SELECT city, name, salary FROM users;

💡 注意:最后一个列名后面不要加逗号,SELECT name, age, FROM users 会报错。

检索所有列

懒人专属——不想敲列名就用 *

sql
SELECT * FROM users;

* 是通配符,代表"所有列,按表定义的顺序返回"。

优点:省事,不知道有什么列时可以先用 * 看一眼。

  • 表有 100 列但只需要 3 列,* 也会把所有列都捞出来,浪费传输
  • 表的列顺序变了,代码可能会出问题

⚠️ 生产环境少用 SELECT *,写代码时明确指定需要的列,后期维护会少很多麻烦。

去掉重复行:DISTINCT

查一下公司员工都在哪些城市:

sql
SELECT city FROM users;
+--------+
| city   |
+--------+
| 北京   |
| 上海   |
| 广州   |
| 深圳   |
| 北京   |  ← 重复
| 上海   |  ← 重复
| 杭州   |
| 北京   |  ← 重复
+--------+

8 个人但只分布在 5 个城市,"北京"出现了 3 次。想去掉重复,加一个 DISTINCT

sql
SELECT DISTINCT city FROM users;
+--------+
| city   |
+--------+
| 北京   |
| 上海   |
| 广州   |
| 深圳   |
| 杭州   |
+--------+

干净了。

⚠️ DISTINCT 作用于所有列的组合SELECT DISTINCT city, name 的意思是"城市 + 名字的组合不重复",不是"只看城市不重复"。

只要前N行:LIMIT

表里有 8 行,暂时只想看前 3 行?

sql
SELECT name, age FROM users LIMIT 3;
+--------+------+
| name   | age  |
+--------+------+
| 张三   |   25 |
| 李四   |   30 |
| 王五   |   28 |
+--------+------+

还可以指定从第几行开始拿。比如从第 4 行开始,拿 2 行:

sql
SELECT name, age FROM users LIMIT 3, 2;
  • 3 — 跳过前 3 行(行号从 0 开始计数,所以跳过的是 0、1、2)
  • 2 — 取 2 行
+--------+------+
| name   | age  |
+--------+------+
| 赵六   |   35 |
| 孙七   |   22 |
+--------+------+

MySQL 也支持另一种更直观的写法(推荐):

sql
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 支持两种注释:

sql
-- 这是单行注释,查询北京的用户
SELECT name, city
FROM users
WHERE city = '北京';   -- WHERE 后面会讲,先不纠结

/*
  这是多行注释
  可以写很多行
  2024年6月13日 张三写的
*/
SELECT DISTINCT city FROM users;

如果想让 MySQL 完全不执行某条语句但不删除它,注释掉就行——调试时常用。

小结

这章学会了最核心的 SQL 操作——查数据,记住五件事:

  1. SELECT 列 FROM 表 — 检索的固定句式,列用逗号隔开
  2. DISTINCT 去重 — 作用于所有列的组合,不是只看第一列
  3. LIMIT 控制行数 — 分页就是靠它,LIMIT N OFFSET M 最直观
  4. SELECT * 慎用 — 快速看一眼可以,写代码时明确指定列
  5. 注释是好习惯-- 单行,/* */ 多行,复杂 SQL 给自己留备忘

💡 SELECT 是整个 SQL 的根基,后面所有章节都是在这句话上加料。把上面五个操作跑熟了,下一章加筛选条件。

自主练习

users 表试试这些操作:

  1. 查询所有员工的 id、name、salary 三列
  2. 查询公司都在哪些城市有员工(不重复)
  3. 查询前 5 个员工的全部信息
  4. 从第 3 个开始,往后查 4 个人

答案自己跑跑看~下一章我们学习怎么加条件筛选,比如"查所有北京的员工"。


评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8