当前位置: 首页 > news >正文

条件查询详细说明

条件查询是通过 WHERE 子句对数据进行过滤的核心操作,其本质是按指定条件筛选出满足要求的行。以下是详细说明:


🔍 一、基础语法结构

SELECT1,2 
FROM 表名 
WHERE 条件表达式;  -- 核心过滤逻辑在此

⚙️ 二、条件表达式类型

1. 比较运算符
运算符含义示例说明
=等于salary = 10000
<>!=不等于dept_id <> 3
>大于age > 30
<小于price < 50.0
>=大于等于score >= 60
<=小于等于order_date <= '2023-12-31'日期需用引号包裹
2. 逻辑运算符
运算符含义示例
ANDage > 25 AND salary < 50000
ORcity = '北京' OR city = '上海'
NOTNOT 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;

⚠️ 四、关键注意事项

  1. 性能影响

    • 避免在 WHERE 中对列进行函数计算(如 WHERE YEAR(order_date) = 2023
    • 改用范围查询:WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31'
  2. 隐式类型转换

    -- 字符串 vs 数字(可能导致全表扫描)
    SELECT * FROM products WHERE id = '1001'; -- 推荐显式类型一致
    SELECT * FROM products WHERE id = 1001; 
    
  3. 短路原则
    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;

相关文章:

  • 如何在 Android 上备份音乐:保护歌曲的 5 种方法
  • OceanBase上架 KubeSphere Marketplace!打造云原生数据库新范式
  • 把springboot打包为maven可引入的jar
  • VsCode 常用快捷键设置方法
  • arcpy数据分析自动化(2)
  • 【Mini-F5265-OB开发板试用测评】基于ST7735STFT屏幕的LVGL9移植
  • 【Linux驱动开发 ---- 1.1_Linux 基础操作入门】
  • 苍穹外卖--添加购物车
  • Websocket 数据实时更新(消息提醒功能)异步+事件发布
  • 我是如何使用Claude Code
  • 基于NAS与内网穿透技术的远程访问架构设计及安全实现
  • 浏览器实现跨系统交互
  • 【寻找Linux的奥秘】第十章:基础文件IO(上)
  • 华为流程体系拆解系列:L1-L6分层拆解逻辑
  • CentOS 7 环境下 Visual Studio Code 安装与部署
  • 分布式系统全链路监控之一:分布式全链路监控基础概念和OpenTelemetry
  • 5.安装IK分词器
  • 鸿蒙组件通用事件开发全攻略:从基础交互到工程实践
  • 华大TAU1114-1216A00四系统GNSS定位模块,车载/穿戴/IoT全适配!-165dBm高灵敏度,定位快人一步!“
  • 基于nacos和gateway搭建微服务管理平台详细教程
  • 如何设计网站建设方案/谷歌外贸网站推广
  • 企业网站制作是什么/关键词排名监控
  • 智通人才网招聘信息/信息流优化师培训
  • 英文网站备案/石家庄seo结算
  • 凡客诚品金金/郑州有没有厉害的seo
  • 微信网站与响应式网站/seo教程网站优化