艾奇视觉网站建设以net结尾的网站
条件查询是通过 WHERE 子句对数据进行过滤的核心操作,其本质是按指定条件筛选出满足要求的行。以下是详细说明:
🔍 一、基础语法结构
SELECT 列1, 列2 
FROM 表名 
WHERE 条件表达式;  -- 核心过滤逻辑在此
 
⚙️ 二、条件表达式类型
1. 比较运算符
| 运算符 | 含义 | 示例 | 说明 | 
|---|---|---|---|
= | 等于 | salary = 10000 | |
<> 或 != | 不等于 | dept_id <> 3 | |
> | 大于 | age > 30 | |
< | 小于 | price < 50.0 | |
>= | 大于等于 | score >= 60 | |
<= | 小于等于 | order_date <= '2023-12-31' | 日期需用引号包裹 | 
2. 逻辑运算符
| 运算符 | 含义 | 示例 | 
|---|---|---|
AND | 与 | age > 25 AND salary < 50000 | 
OR | 或 | city = '北京' OR city = '上海' | 
NOT | 非 | NOT is_deleted | 
优先级:NOT > AND > OR
 👉 建议用 () 明确优先级:
-- 错误:会先执行 OR 再执行 AND
WHERE age > 18 OR gender = 'F' AND status = 1  -- 正确:明确分组
WHERE (age > 18 OR gender = 'F') AND status = 1
 
3. 特殊条件运算符
| 运算符 | 含义 | 示例 | 
|---|---|---|
BETWEEN ... AND | 范围匹配(闭区间) | salary BETWEEN 8000 AND 15000 | 
IN (值列表) | 多值匹配 | dept_id IN (101, 102, 105) | 
LIKE '模式' | 模糊匹配 | name LIKE '张%' | 
IS NULL | 空值判断 | phone IS NULL | 
IS NOT NULL | 非空判断 | email IS NOT NULL | 
🧩 三、高级条件技巧
1. 模糊匹配 (LIKE)
 
| 通配符 | 含义 | 示例 | 匹配结果 | 
|---|---|---|---|
% | 任意长度字符 | LIKE 'a%' | “apple”, “abc” | 
_ | 单个字符 | LIKE '张_' | “张三”, “张四” | 
[charlist] | 字符集合 (仅SQL Server) | LIKE '[ae]%' | “apple”, “egg” | 
转义特殊字符(如搜索含 % 的字符串):
WHERE comment LIKE '%30\%%' ESCAPE '\'  -- 匹配 "折扣30%" 类文本
 
2. 多条件组合
-- 组合 AND/OR/NOT
SELECT *
FROM employees
WHERE (department = '研发部' OR department = '产品部')AND salary > 15000NOT is_retired;
 
3. 子查询条件
-- 查询薪资高于部门平均值的员工
SELECT name, salary
FROM employees e
WHERE salary > (SELECT AVG(salary) FROM employees WHERE department = e.department  -- 关联子查询
);
 
4. NULL 值处理
-- 错误:NULL 无法用 = 判断
SELECT * FROM users WHERE phone = NULL;  -- 无结果!-- 正确:必须用 IS NULL
SELECT * FROM users WHERE phone IS NULL;
 
⚠️ 四、关键注意事项
-  
性能影响:
- 避免在 
WHERE中对列进行函数计算(如WHERE YEAR(order_date) = 2023) - 改用范围查询:
WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31' 
 - 避免在 
 -  
隐式类型转换:
-- 字符串 vs 数字(可能导致全表扫描) SELECT * FROM products WHERE id = '1001'; -- 推荐显式类型一致 SELECT * FROM products WHERE id = 1001; -  
短路原则:
MySQL 对AND/OR从左到右计算,遇到FALSE提前终止(优化性能) 
💡 五、实战示例
-- 查询2023年下半年在北京或上海、薪资1-2万且未离职的研发工程师
SELECT name, phone
FROM employees
WHERE department = '研发部'AND job_title = '工程师'AND join_date BETWEEN '2023-07-01' AND '2023-12-31'AND (city = '北京' OR city = '上海')AND salary BETWEEN 10000 AND 20000AND resign_date IS NULL;
