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

WHERE 的符号全家桶第一箱:!= 不等、> < >= <= 比较、BETWEEN 范围——重点记 BETWEEN 是【含两头】的闭区间。

📝 本节和前面几节的关系

3-8 的 WHERE 槽里装上了 = 和 AND/OR;本节把比较符号补齐——从此【大于等于 80 且不等于 100】这种条件张口就来。(文件名里的比较符号用全角写,半角 > < 不允许出现在 Windows 文件名里;正文 SQL 里一律半角。)

一、比较符号全家福

符号 意思 示例
= 等于 class = 1
!= 不等于(也可写 <>) class != 1
> >= 大于 / 大于等于 score > 80
< <= 小于 / 小于等于 score <= 64
-- 准备块(没建表先跑 3-6 的准备块)

SELECT * FROM students WHERE score != 78;    -- 排除王五
SELECT * FROM students WHERE score >= 78;    -- 78、85、92(钱七 NULL 不算,3-10 说)
SELECT * FROM students WHERE score < 78;     -- 64

注意:比较 NULL 的行直接落空——NULL 和任何数比较都不是真,钱七在 score >= 78 里查不到;这不是 bug,是 NULL 的脾气(3-10 处理)。

二、BETWEEN:含两头的闭区间

-- 70 到 85 之间(含 70 和 85 本身)
SELECT * FROM students WHERE score BETWEEN 70 AND 85;

输出:张三 85、王五 78。

BETWEEN a AND b = score >= a AND score <= b——两个端点都算数。

最大坑:以为 BETWEEN 不含端点。 85 算不算【70 到 85 之间】?SQL 说不含糊——算。

三、动手 Demo:每个符号踩一遍

-- ① 不等于
SELECT * FROM students WHERE class != 1;

-- ② 范围:60~85 之间(含端点)
SELECT * FROM students WHERE score BETWEEN 60 AND 85;

-- ③ 等价改写对照(结果与②完全一样)
SELECT * FROM students WHERE score >= 60 AND score <= 85;

-- ④ 排除端点的开区间(78 和 85 都不要)
SELECT * FROM students WHERE score > 70 AND score < 85;

-- ⑤ NOT BETWEEN:范围外的
SELECT * FROM students WHERE score NOT BETWEEN 70 AND 85;

看到什么算成功:②和③输出一致(85、78 两行);④只剩王五 78(70 < 78 < 85,端点 85 被排掉);⑤是 92 和 64 两行。三组结果亲手对上,闭区间刻进脑子。

四、30 秒实验

试试字符串也能比:SELECT * FROM students WHERE name > '李四';——能跑(文字按字典序比),输出按拼音序在【李四】后面的行。比较符号对 TEXT 也有效,但字典序与直觉常有出入(汉字排序依编码),正式业务比大小尽量用数字列。

五、常见误区

  1. "BETWEEN 不含右端点" —— 含。BETWEEN 70 AND 85 两头都抓;要开区间自己用 > < 拼。
  2. "不等于只有 != 一种写法" —— 还能写 <>,效果一样;有的老系统只认 <>。
  3. "NULL 也会被 >= 这类条件查出来" —— 不会。NULL 与任何值比较都【不真】,要抓 NULL 得用专门的 IS NULL(3-10)。
自测三问(点开对答案) 1. 不等于有几种写法? **两种:`!=` 和 `<>`**。 2. `BETWEEN 70 AND 85` 等价于什么?含端点吗? **`score >= 70 AND score <= 85`;含两端**。 3. 钱七(score 为 NULL)会被 `score > 60` 查出来吗? **不会**——NULL 与任何数比较都不真;抓 NULL 用 IS NULL。

相关笔记