WHERE 能写哪些条件
六类运算符,覆盖了日常八成以上的筛选需求。

关键术语
重 点
不等于有两种写法,标准 SQL 写尖括号那对,MySQL 也认叹号加等号。
六类运算符,覆盖了日常八成以上的筛选需求。

不等于有两种写法,标准 SQL 写尖括号那对,MySQL 也认叹号加等号。
字段和常数比,或者字段和字段比。

字符型也能比大小,按字典序,所以字符串的条件要用单引号括住。
及以上包含 90 本身,用大于等于。而且是先大于后等于,反过来写是语法错。
AND 要两边都成立,OR 只要一边成立。

| 写法 | 什么时候留下这一行 |
|---|---|
| A AND B | 两个都成立 |
| A OR B | 至少一个成立 |
AND 还能写成两个与号,OR 还能写成两根竖线,效果完全一样。
查计算机和数学两个专业,该用 AND 还是 OR?
NOT 放在条件前面,成立的变不成立。

NOT 括住一整段条件时,里面的 AND 会跟着变成 OR,这是德摩根律。
年龄不在三十到四十之间,等于说要么不到三十,要么超过四十。
NOT 写法更贴近口语,展开写法更贴近机器的判断过程。
NOT 最高、AND 居中、OR 最低,括号可以改这个次序。

两头都包含,等于大于等于加上小于等于。

BETWEEN 后面必须小的在前大的在后,写反了一行也查不出来。
BETWEEN 是闭区间,两个端点都算在内,连接词是 AND 不是 OR。
两头之外的都要,端点本身不要。

展开写要用 OR,因为一个值不可能同时既小于下界又大于上界。
像筛体温异常的人,要么低于三十六度,要么高于三十七度三,不可能两样都占。
为什么这里的等价写法用 OR 而不是 AND?
括号里列几个值,字段等于其中任意一个就留下。

IN 就是一串 OR 的简写,值一多,IN 比连写十个 OR 清楚得多。
像发通知说三班五班来开会,报到的人只要属于这两个班就行。
这里的括号里还能放一整条 SELECT,那就是本章第三节的子查询。
从上一题的结果里,把命中的那些行拿掉。

NOT IN 展开成不等号时连接词是 AND,不在集合里意味着每一个都不等于。
用 OR 连的话,任何一门课都满足其中一半,等于没筛,这是常见的错。
两个通配符,百分号配任意多个字,下划线配一个。

LIKE 左边的字段必须是字符型,数字列上写 LIKE 没有意义。
位置决定含义,包在两头是包含,只放右边是开头。

| 模式 | 配上什么 |
|---|---|
| %程序% | 任意位置有程序 |
| 程序% | 必须以程序开头 |
| %程序 | 必须以程序结尾 |
左边带百分号的模式用不上索引,大表上会一行一行扫过去。
一个下划线严格对应一个字符,不多不少。

下划线配汉字也是一个顶一个,不用管这个字在内部占几个字节。
第一个字任意,第二个字是据,后面随便。数据开头的课程名都符合。
没填值的字段是 NULL,它不占空间,也不等于任何东西。

| sno | cno | score |
|---|---|---|
| s2 | c6 | 81.50 |
| s2 | c7 | NULL |
| s4 | c6 | NULL |
| s7 | c5 | 62.00 |
缺考的成绩是 NULL,考了零分的成绩是 0,这两件事完全不同。
问有没有值用 IS NULL,问有值的用 IS NOT NULL。
