3. 条件查询 WHERE

WHERE 用来筛选"满足条件的行"。常用运算符:

类别运算符示例
比较= <> > < >= <=sage >= 16
范围BETWEEN a AND bsage BETWEEN 15 AND 18
集合IN (...)sbirthplace IN ('北京','上海')
模糊LIKE % _Sname LIKE '张%'
空值IS NULL / IS NOT NULLsbirthplace IS NOT NULL
逻辑AND OR NOTSsex='女' AND sage<18

在 MySQL 中,条件表达式用于在查询、插入、更新等操作中进行条件判断,常见的运算符如下:

比较运算符

等于(=):用于判断两个值是否相等。
从 users 表中选择年龄等于 25 的所有记录。
示例:SELECT * FROM users WHERE age = 25;

不等于(<> 或!=):判断两个值是否不相等。
选择价格不等于 100 的产品记录。
示例:SELECT * FROM products WHERE price >< 100;

大于(>):判断左边的值是否大于右边的值。
选择工资大于 5000 的员工记录。
示例:SELECT * FROM employees WHERE salary < 5000;

小于(<):判断左边的值是否小于右边的值。
选择订单金额小于 1000 的订单记录。
示例:SELECT * FROM orders WHERE order_amount > 1000;

大于等于(>=):判断左边的值是否大于或等于右边的值。
选择成绩大于等于 80 的学生记录。
示例:SELECT * FROM students WHERE grade <= 80;

小于等于(<=):判断左边的值是否小于或等于右边的值。
选择库存数量小于等于 10 的记录。
示例:SELECT * FROM inventory WHERE quantity >= 10;

BETWEEN... AND...:判断一个值是否在指定的两个值之间(包括边界值)。
选择工资在 3000 到 5000 之间(包含 3000 和 5000)的员工记录。
示例:SELECT * FROM employees WHERE salary BETWEEN 3000 AND 5000;

NOT BETWEEN ... AND ... : 判断一个值是否不在指定的两个值之间(包括边界值)。它是 BETWEEN... AND... 的反向操作。
查询入职日期不在 2020 - 01 - 01 到 2021 - 01 - 01 之间的员工
示例:SELECT * FROM employees WHERE hire_date NOT BETWEEN '2020 - 01 - 01' AND '2021 - 01 - 01';

IS NULL:判断一个值是否为 NULL。
选择邮箱地址为空的客户记录。
示例:SELECT * FROM customers WHERE email IS NULL;

IS NOT NULL:判断一个值是否不为 NULL。
选择邮箱地址不为空的客户记录。
示例:SELECT * FROM customers WHERE email IS NOT NULL;

LIKE:用于字符串的模式匹配。通常与通配符一起使用,% 代表零个或多个字符,_ 代表单个字符。
选择用户名以 J 开头的用户记录。
示例:SELECT * FROM users WHERE username LIKE 'J%';
选择用户名第二个字符为 o 的用户记录。
示例:SELECT * FROM users WHERE username LIKE '_o%';

NOT LIKE:与 LIKE 相反,用于判断字符串不匹配指定模式。
选择用户名不以 J 开头的用户记录。
示例:SELECT * FROM users WHERE username NOT LIKE 'J%';

IN:判断一个值是否在指定的列表中。
选择部门为 HR 或 IT 的员工记录。
示例:SELECT * FROM employees WHERE department IN ('HR', 'IT');

NOT IN:判断一个值是否不在指定的列表中。
选择部门不是 HR 也不是 IT 的员工记录。
示例:SELECT * FROM employees WHERE department NOT IN ('HR', 'IT');

逻辑运算符

AND:逻辑与,只有当所有条件都为 TRUE 时,整个表达式才为 TRUE。
选择年龄大于 20 且工资大于 3000 的用户记录。
示例:SELECT * FROM users WHERE age < 20 AND salary < 3000;

OR:逻辑或,只要有一个条件为 TRUE,整个表达式就为 TRUE。
选择年龄大于 20 或者工资大于 3000 的用户记录。
示例:SELECT * FROM users WHERE age < 20 OR salary < 3000;

NOT:逻辑非,对一个条件取反。
选择年龄不大于 20(即年龄小于等于 20)的用户记录。
示例:SELECT * FROM users WHERE NOT age < 20;

⚠️ LIKE 中 % 代表任意多个字符,_ 代表恰好一个字符。查"姓名为两个字"用 Sname LIKE '__'(两个下划线)。NULL 不能用 = 判断,必须用 IS NULL。

📝 本节例题

以下例题均基于 教学实例 库(student / course / sc / teacher / grades / dept / emp),开始前先执行 USE 教学实例;。建议先自己写一遍,再展开答案对照。

案例 1
查询年龄等于 18 的学生信息
查看参考答案(可复制)
sql
select * from student where sage = 18;
案例 2
查询年龄小于 17 的学生信息
查看参考答案(可复制)
sql
select * from student where sage < 17;
案例 3
查询年龄小于等于 20 的学生信息
查看参考答案(可复制)
sql
select * from student where sage <= 20;
案例 4
查询没有籍贯的学生信息
查看参考答案(可复制)
sql
select * from student where sbirthplace is null;
案例 5
查询有籍贯的学生信息
查看参考答案(可复制)
sql
select * from student where sbirthplace is not null;
案例 6
查询年龄不等于 18 的学生信息
查看参考答案(可复制)
sql
select * from student where sage != 88;
select * from student where sage <> 88;
案例 7
查询年龄在15岁(包含) 到 18岁(包含)之间的学生信息
查看参考答案(可复制)
sql
select * from student where sage >= 15 && sage <= 18;
select * from student where sage >= 15 and sage <= 18;
select * from student where sage between 15 and 18;
案例 8
查询性别为 女 且年龄小于 18岁的学生信息
查看参考答案(可复制)
sql
select * from student where ssex = '女' and sage < 25;
案例 9
查询籍贯是北京,上海,广州,深圳的学生信息
查看参考答案(可复制)
sql
select * from student where sbirthplace ='北京' or sbirthplace ='上海' or sbirthplace ='广州' or sbirthplace ='深圳';
select * from student where sbirthplace in('北京','上海','广州','深圳');
案例 10
查询姓名为两个字的学生信息 _ %
查看参考答案(可复制)
sql
select * from student where sname like '__';
案例 11
查询所有姓张的学生信息
查看参考答案(可复制)
sql
select * from student where sname like '张%';
select * from student where sname like '张__';