🗄️ 第三章 操作数据库-SQL的使用方法
📄 一句话概括

WHERE 符号第二箱:IN 一网捞多条、LIKE 模糊匹配(% 万能牌)、IS NULL 专抓空——NULL 不能用 = 找,是本节的灵魂。

📝 本节和前面几节的关系

3-9 的符号管【数值大小】;本节管三种它管不了的活:【值在一串名单里】【只记得一部分】【压根没有值】。上一节埋的【钱七查不到】的伏笔,在本节 IS NULL 处回收。

一、IN:名单制查询

查【2 班或 3 班】:

-- 准备块(没建表先跑 3-6 的准备块)

-- 写法一:OR 串联
SELECT * FROM students WHERE class = 2 OR class = 3;

-- 写法二:IN 一网捞(等价,更清爽)
SELECT * FROM students WHERE class IN (2, 3);

二、LIKE:模糊匹配的两个通配符

只记得【姓张】或【名字两个字】?LIKE 来了:

通配符 意思 示例
% 任意长度的任意字符 '张%'=张开头的一切
_ 恰好一个字符 '__'=恰好两个字
SELECT * FROM students WHERE name LIKE '张%';   -- 张三(张开头)
SELECT * FROM students WHERE name LIKE '__';    -- 所有两个字的名字(张三/李四/王五/赵六/钱七)

三、IS NULL:抓【没有值】的人

回收上一节伏笔——为什么 score = NULL 查不到钱七?

NULL 是【没有值】,不是【某个值】——连它自己都不等于自己,所以 = NULL 永远不成立。抓它要用专门的句子:

-- 查没有分数的人
SELECT * FROM students WHERE score IS NULL;

输出:钱七那一行。

四、动手 Demo:三招连打

-- ① IN:1 班和 2 班
SELECT * FROM students WHERE class IN (1, 2);

-- ② LIKE:名字恰好两个字
SELECT * FROM students WHERE name LIKE '__';

-- ③ IS NULL:谁没分数
SELECT * FROM students WHERE score IS NULL;

-- ④ IS NOT NULL:谁有分数(4 行,钱七出局)
SELECT * FROM students WHERE score IS NOT NULL;

看到什么算成功:③只有钱七、④是前四行——【空的和有的一刀两断】。

五、30 秒实验

亲手验证 NULL 的怪脾气:

SELECT * FROM students WHERE score = NULL;    -- 0 行!
SELECT * FROM students WHERE score != 60;     -- 4 行——钱七也不在!

第二条最颠覆:NULL 连【不等于 60】都不成立——它对一切比较都装死。想抓它只有 IS NULL 这一把钥匙。

六、常见误区

  1. "查空值写 score = NULL" —— 错!NULL 不是值,= 找不到它;必须 IS NULL。这是全 SQL 最高频的错误之一。
  2. "LIKE 的 % 和 _ 可以混着随意用" —— 各有分工:% 任意长、_ 恰一位;【姓张且名两个字】要写 '张_' 而不是 '张%'。
  3. "IN 只能配数字" —— 文本也行:name IN ('张三', '李四');名单里是字符串要带引号。
自测三问(点开对答案) 1. `class = 2 OR class = 3` 的清爽等价写法? **`class IN (2, 3)`**。 2. LIKE 的两个通配符各是什么意思? **`%`=任意长度任意字符,`_`=恰好一个字符**。 3. 为什么 `= NULL` 查不到空值?正确写法? **NULL 不是值、对一切比较装死;必须写 `IS NULL`**。

相关笔记