WHERE 子句是 MySQL 中最核心的查询功能之一,它允许我们根据特定条件筛选数据。以下是 WHERE 子句的全面解析:

基本语法

SELECT 字段列表

FROM 表名

WHERE 查询条件;

 

比较运算符查询

运算符描述示例
=等于WHERE age = 20
<> 或 !=不等于WHERE age <> 20
>大于WHERE height > 170
<小于WHERE height < 170
>=大于等于WHERE age >= 18
<=小于等于WHERE age <= 30


示例:

查询身高等于170cm的学生

SELECT name, height FROM students WHERE height = 170;


查询年龄小于22岁的学生

SELECT name, age FROM students WHERE age < 22;


逻辑运算符查询

1. AND (&&) - 与运算

查询年龄大于21且身高≥175的学生

SELECT name, age, height 
FROM students 
WHERE age > 21 AND height >= 175;


2. OR (||) - 或运算

查询年龄大于21或身高≥175的学生

SELECT name, age, height
FROM students
WHERE age > 21 OR height >= 175;


3. XOR - 异或运算

查询满足年龄>21或身高≥175,但不同时满足的学生

SELECT name, age, height
FROM students
WHERE age > 21 XOR height >= 175;


4. NOT (!) - 非运算

查询不是22岁的学生

SELECT name, age
FROM students
WHERE NOT age = 22;


特殊条件查询

1. BETWEEN AND - 范围查询

查询年龄在20到23岁之间的学生

SELECT name, age
FROM students
WHERE age BETWEEN 20 AND 23;


2. IS NULL - 空值查询

查询没有填写身高的学生

SELECT name
FROM students
WHERE height IS NULL;


3. IN - 集合查询

 查询年龄为22、23或25岁的学生

SELECT name, age
FROM students
WHERE age IN (22, 23, 25);


4. LIKE - 模糊查询

查询姓"张"的学生(%表示任意多个字符)

SELECT name
FROM students
WHERE name LIKE '张%';


查询名字包含"an"的学生

SELECT name
FROM students
WHERE name LIKE '%an%';


查询姓"李"且名字为两个字的学生(_表示单个字符)

SELECT name
FROM students
WHERE name LIKE '李_';


运算符优先级

当多个运算符一起使用时,MySQL 按照以下优先级顺序计算:

优先级运算符/关键字描述
1()括号(最高优先级)
2NOT逻辑非
3=>< 等比较运算符
4AND逻辑与
5OR逻辑或
6XOR逻辑异或(最低优先级)

建议:使用括号明确优先级,增强可读性

清晰的优先级表达

SELECT name, age, height
FROM students
WHERE (age > 20 OR height > 170) AND sex = 'F';

复合条件查询示例

示例1:多条件组合

查询20-23岁之间,身高在160-180cm的女生

SELECT name, age, height
FROM students
WHERE age BETWEEN 20 AND 23
  AND height BETWEEN 160 AND 180
  AND sex = 'F';

示例2:复杂逻辑组合

查询(年龄<22或身高>175)且不是计算机系的学生

SELECT name, age, height, dept
FROM students
WHERE (age < 22 OR height > 175)
  AND dept != '计算机';

示例3:NULL值处理

查询没有填写身高或身高低于160cm的学生

SELECT name, height
FROM students
WHERE height IS NULL OR height < 160;

性能优化建议

1. 为常用查询条件建立索引:特别是 WHERE 子句中频繁使用的字段

2. 避免在索引列上使用函数:

不推荐(无法使用索引)

   WHERE YEAR(register_date) = 2023;

推荐

WHERE register_date BETWEEN '2023-01-01' AND '2023-12-31';

3. 注意LIKE查询的通配符位置:

    `LIKE '张%'` 可以使用索引

    `LIKE '%张%'` 无法使用索引

4. 合理使用EXISTS代替IN:对于子查询,EXISTS通常性能更好

点赞(1)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)