条件查询语法
# 条件查询语法
主要用到 WHERE
关键字,后面跟上搜索条件。
# 简单搜索条件
把 搜索条件
放在 WHERE
子句中,搜索条件中可以使用如下几种比较操作符:
操作符 | 示例 | 描述 |
---|---|---|
= | a = b | a 等于 b |
<> 或者 != | a <> b | a 不等于 b |
< | a < b | a 小于 b |
<= | a <= b | a 小于或等于 b |
> | a > b | a 大于 b |
>= | a >= b | a 大于或等于 b |
BETWEEN | a BETWEEN b AND c | 满足 b <= a <= c |
NOT BETWEEN | a NOT BETWEEN b AND c | 不满足 b <= a <= c |
比如想查询 student_info
表中名字是 "张星星"
的学生的一些信息,可以这么写:
SELECT number, name, id_number, major FROM student_info WHERE name = '张星星';
想查询学号不在 20220102
~ 20220104
这个区间内的所有学生信息,可以这么写:
SELECT number, name, id_number, major FROM student_info WHERE number NOT BETWEEN 20220102 AND 20220104;
# 匹配列表中的元素
如果搜索条件中指定的匹配值并不是单个值,而是一个列表,只要匹配到列表中的某一项就算匹配成功,这种情况可以使用 IN
操作符:
操作符 | 示例 | 描述 |
---|---|---|
IN | a IN (b1, b2, ...) | a 是 b1, b2, ... 中的某一个 |
NOT IN | a NOT IN (b1, b2, ...) | a 不是 b1, b2, ... 中的任意一个 |
比如想查询软件工程和飞行器设计专业的学生信息,可以这么写:
SELECT number, name, id_number, major FROM student_info WHERE major IN ('软件工程', '飞行器设计');
# 匹配 NULL 值
NULL
代表没有值,在判断某一列是否为 NULL
的时候不能单纯的使用 =
操作符,而是需要专门判断值是否是 NULL
的操作符:
操作符 | 示例 | 描述 |
---|---|---|
IS NULL | a IS NULL | a 的值是 NULL |
IS NOT NULL | a IS NOT NULL | a 的值不是 NULL |
比如想看一下 student_info
表的 name
列是 NULL
的学生记录有哪些,可以这么写:
SELECT number, name, id_number, major FROM student_info WHERE name IS NULL;
# 多个搜索条件的查询
上边都是指定单个搜索条件的查询,也可以在一个查询语句中指定多个搜索条件。
# AND 操作符
用于查询出符合所有搜索条件的结果集,例如:
SELECT * FROM student_score WHERE subject = '高等数学' AND score > 75;
# OR 操作符
用于查询出只要符合任意给定搜索条件的结果集,例如:
SELECT * FROM student_score WHERE score > 95 OR score < 55;
# 更复杂的搜索条件的组合
当搜索条件中要结合多个 AND 和 OR 操作符时,AND 操作符的优先级高于 OR 操作符。
为了避免错误,此时最好使用小括号 ()
来显式的指定各个搜索条件的检测顺序,比如:
SELECT * FROM student_score WHERE (score > 95 OR score < 55) AND subject = '高等数学';
上面的语法如果不加小括号,那么查询出来的结果集和期望的(找出课程为 "高等数学"
,并且成绩大于 95
分或者小于 55
分的记录)是有出入的。
# 通配符
就是模糊查询的场景,使用下面这两个操作符来支持模糊查询:
操作符 | 示例 | 描述 |
---|---|---|
LIKE | a LIKE b | a 匹配 b |
NOT LIKE | a NOT LIKE b | a 不匹配 b |
然后需要用某个符号(称为通配符)来替代这些模糊的信息。MySQL 中支持下边这两个通配符:
%
:代表任意一个字符串。SELECT number, name, id_number, major FROM student_info WHERE name LIKE '张%';
1_
:代表任意一个字符(用于精确知道字符串长度的情况)。SELECT number, name, id_number, major FROM student_info WHERE name LIKE '_星_';
1
小贴士
LIKE
或者 NOT LIKE
操作符只用于字符串匹配。另外,通配符不能代表 NULL
,如果需要匹配 NULL
的话,需要使用 IS NULL
或者 IS NOT NULL
。
# 转义通配符
如果待匹配的字符串中本身就包含普通字符 '%'
或者 '_'
,就需要在它们前边加一个反斜杠 \
来和通配符区分开,也就是说:
'\%'
代表普通字符'%'
'\_'
代表普通字符'_'
例如查询名字叫 张_
的学生:
SELECT number, name, id_number, major FROM student_info WHERE name LIKE '张\_';
(完)