📄 一句话概括
WHERE 是横切的筛子——按条件只留符合条件的行;AND 是【并且】、OR 是【或者】,两个连用时的优先级坑是本节最大的雷。
📝 本节和前面几节的关系
3-7 学了竖切(挑列);本节补上横切(挑行)——WHERE 是查询章节的发动机,3-9、3-10 的所有比较符号都装在它的槽里。
一、WHERE:只留符合条件的行
-- 准备块(没建表先跑 3-6 的准备块)
SELECT * FROM students WHERE class = 1;
输出(只留 1 班):
id name class score
1 张三 1 85
2 李四 1 92
class = 1是条件表达式:对每一行求值,真则留、假则丢- 一个
=就是等号(不是 C++ 的==;SQL 判断相等就写一个=)
二、AND / OR:条件的乘法和加法
-- AND:两边都真才留(1 班且 80 分以上)
SELECT * FROM students WHERE class = 1 AND score >= 80;
-- OR:一边真就留(2 班或 60 分以下)
SELECT * FROM students WHERE class = 2 OR score < 60;
| 行 | class=1 | score>=80 | AND 结果 |
|---|---|---|---|
| 张三 85 | 真 | 真 | 留 |
| 李四 92 | 真 | 真 | 留 |
| 王五 78 | 假 | 假 | 丢 |
| 赵六 64 | 假 | 假 | 丢 |
三、⚠️ 本节最大的雷:AND 比 OR 优先
想查【1 班的所有人,或者 80 分以上的人(不管班级)】:
-- 错误写法
SELECT * FROM students WHERE class = 1 OR score >= 80 AND class = 2;
-- 实际被解析成:class=1 OR (score>=80 AND class=2) —— AND 先抱团!
AND 相当于乘法、OR 相当于加法——乘法先算。 拿不准就加括号:
-- 明确写法
SELECT * FROM students WHERE class = 1 OR (score >= 80 AND class = 2);
职业习惯:AND OR 混用时永远加括号,哪怕你知道优先级——读代码的人不一定知道。
四、动手 Demo:三个条件各跑一遍
-- ① 单条件
SELECT * FROM students WHERE score >= 78;
-- ② AND:2 班 70 分以上
SELECT * FROM students WHERE class = 2 AND score >= 70;
-- ③ OR:1 班或 90 分以上
SELECT * FROM students WHERE class = 1 OR score >= 90;
-- ④ 优先级验证:比较加括号前后
SELECT * FROM students WHERE class = 1 OR score >= 80 AND class = 2;
SELECT * FROM students WHERE (class = 1 OR score >= 80) AND class = 2;
看到什么算成功:④两句话结果不同——不加分号前那句把【李四(92,1 班)】也放进来了(OR 左边单独成立),加括号后只剩 2 班 80 分以上的人(本表为空)。亲眼看到括号改变命运。
五、30 秒实验
把条件里的列换成不存在的列:SELECT * FROM students WHERE gender = '男';——报错【no such column】。WHERE 里只能用这张表真实存在的列(以及现算的表达式),写错列名 DBMS 立刻翻脸——这是它帮你抓笔误。
六、常见误区
- "判断相等写 ==" —— SQL 里一个
=就是判等;写==部分 DBMS 报错。 - "AND 和 OR 谁先谁后无所谓" —— 有所谓!AND 先算(乘法先于加法),本节雷区就是它;混用必加括号。
- "WHERE 后面可以直接跟列别名" —— 多数数据库不允许(WHERE 先于 SELECT 执行,别名还没出生);WHERE 里写原列名。
自测三问(点开对答案)
1. WHERE 做的是横切还是竖切? **横切——按条件留行**;竖切挑列是 SELECT 的活。 2. SQL 判断相等写几个等号? **一个 `=`**。 3. AND 和 OR 谁优先?最稳的写法? **AND 优先(乘法先算);混用永远加括号**。- ☐ 下一节(3-9 !=、>、>=、<、<=、BETWEEN-用于查询的符号1-不相等的值、指定值的范围)
相关笔记
- SELECT-获取数据 —— 上一节:竖切,本节补上横切
- 🗄️ 数据库基础 · 索引 —— 全课路线图