条件查询的运算符
WHERE 后面写查询条件,常用的运算符有六类。

重 点
不等于可以写成 <> 或 !=,两种写法效果相同。
WHERE 后面写查询条件,常用的运算符有六类。

不等于可以写成 <> 或 !=,两种写法效果相同。
字段与常数比较,字符串常数要加单引号。

及以上包括 90,用大于等于。大于等于要写成 >=,写成 => 会报语法错误。
AND 要求两个条件都成立,OR 只要一个成立,NOT 把条件取反。
| 运算符 | 什么时候成立 |
|---|---|
条件1 AND 条件2 | 两个条件都成立 |
条件1 OR 条件2 | 至少有一个条件成立 |
NOT 条件 | 条件不成立时,NOT 条件成立 |
SELECT * FROM s WHERE maj = '计算机' OR maj = '数学';
SELECT tno AS 教师号, tn AS 姓名, prof AS 职称 FROM t WHERE NOT (age >= 30 AND age <= 40);
等价写法:WHERE age < 30 OR age > 40
| 教师号 | 姓名 | 职称 |
|---|---|---|
| t2 | 石丽 | 讲师 |
| t4 | 赵礼 | 教授 |
查计算机和数学两个专业的学生,用 AND 还是 OR?
NOT 最先计算,其次是 AND,最后是 OR,括号可以改变顺序。

条件中同时有 AND 和 OR 时,给 OR 的部分加上括号,意思最清楚。
BETWEEN 查一个范围内的值,包括两端。
SELECT cno, cn, ct FROM c WHERE ct BETWEEN 30 AND 40;
等价于 WHERE ct >= 30 AND ct <= 40
| cno | cn | ct |
|---|---|---|
| c1 | Java程序设计 | 40 |
| c6 | 数据挖掘 | 32 |
| c8 | 控制理论 | 32 |
SELECT * FROM c WHERE ct NOT BETWEEN 30 AND 40;
等价于 WHERE ct < 30 OR ct > 40
| cno | cn | ct |
|---|---|---|
| c2 | 程序设计基础 | 48 |
| c3 | 线性代数 | 48 |
| c4 | 数据结构 | 64 |
| c5 | 数据库系统 | 56 |
| c7 | 高等数学 | 60 |
BETWEEN 40 AND 30 等价于 ct >= 40 AND ct <= 30,没有值能同时满足,一行也查不出来。
IN 查等于列表中某一个值的行,NOT IN 查都不相等的行。
SELECT sno, cno, score
FROM sc
WHERE cno IN ('c4', 'c6');等价于 WHERE cno = 'c4' OR cno = 'c6'
| sno | cno | score |
|---|---|---|
| s2 | c4 | 70.00 |
| s3 | c4 | 85.00 |
| s2 | c6 | 81.50 |
| s4 | c6 | NULL |
SELECT sno, cno, score
FROM sc
WHERE cno NOT IN ('c4', 'c6');等价于 WHERE cno <> 'c4' AND cno <> 'c6'
不在集合中,就是和每一个都不相等,要用 AND。用 OR 的话任何课程号都满足。
记不全名称时,用 LIKE 和通配符进行部分匹配。
| 模式 | 匹配什么 | 例如 |
|---|---|---|
'%程序%' | 任意位置含有“程序” | Java程序设计、程序设计基础 |
'程序%' | 以“程序”开头 | 程序设计基础 |
'%理论' | 以“理论”结尾 | 控制理论 |
'_据%' | 第二个字是“据” | 数据结构、数据库系统、数据挖掘 |
SELECT cno AS 课程号, cn AS 课程名, ct AS 课时 FROM c WHERE cn LIKE '%程序%';
SELECT cno AS 课程号, cn AS 课程名, ct AS 课时 FROM c WHERE cn LIKE '程序%';
MySQL 的 LIKE 只有 % 和 _ 两个通配符。
NOT LIKE 查不匹配的行,下划线只匹配一个字符。

第一个字任意,第二个字是“据”,后面任意。两门课都符合。
空值只能用 IS NULL 或 IS NOT NULL 来判断。

| sno | cno | score |
|---|---|---|
| s2 | c6 | 81.50 |
| s2 | c7 | NULL |
| s4 | c6 | NULL |
| s7 | c5 | 62.00 |
空值不等于 0。没参加考试的成绩是 NULL,考了 0 分的成绩是 0。