3. 条件查询 WHERE
WHERE 用来筛选"满足条件的行"。常用运算符:
| 类别 | 运算符 | 示例 |
|---|---|---|
| 比较 | = <> > < >= <= | sage >= 16 |
| 范围 | BETWEEN a AND b | sage BETWEEN 15 AND 18 |
| 集合 | IN (...) | sbirthplace IN ('北京','上海') |
| 模糊 | LIKE % _ | Sname LIKE '张%' |
| 空值 | IS NULL / IS NOT NULL | sbirthplace IS NOT NULL |
| 逻辑 | AND OR NOT | Ssex='女' 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 教学实例;。建议先自己写一遍,再展开答案对照。
查看参考答案(可复制)
select * from student where sage = 18;查看参考答案(可复制)
select * from student where sage < 17;查看参考答案(可复制)
select * from student where sage <= 20;查看参考答案(可复制)
select * from student where sbirthplace is null;查看参考答案(可复制)
select * from student where sbirthplace is not null;查看参考答案(可复制)
select * from student where sage != 88;
select * from student where sage <> 88;查看参考答案(可复制)
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;查看参考答案(可复制)
select * from student where ssex = '女' and sage < 25;查看参考答案(可复制)
select * from student where sbirthplace ='北京' or sbirthplace ='上海' or sbirthplace ='广州' or sbirthplace ='深圳';
select * from student where sbirthplace in('北京','上海','广州','深圳');查看参考答案(可复制)
select * from student where sname like '__';查看参考答案(可复制)
select * from student where sname like '张%';
select * from student where sname like '张__';