当前位置: 首页 > 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;
http://www.lryc.cn/news/571197.html

相关文章:

  • 为编写Python脚本实现H3C交换机自动化配置笔记一
  • Java编程之外观模式
  • JSON编辑器:三种模式的应用(三)
  • 重构气血经络的数学模型:气血经络级联控制系统核心方程
  • 第17天:数据库学习笔记1
  • MySQL 默认连接数
  • .sstop勒索加密数据库恢复---惜分飞
  • 从电商平台下载数据的项目经验分享 (part 1)
  • 前后端拦截器+MDC实现纯数字 traceId 全链路日志追踪(axios + Spring Boot 超详细实战)
  • DeepSeek 大型 MoE 模型大规模部署压测学习
  • FlinkCDC-Hudi数据实时入湖原理篇
  • JVM监控的挑战:Applications Manager如何提供帮助
  • Spring Boot集成Kafka全攻略:从基础配置到高级实践
  • 多模态大语言模型演进:从视觉理解到具身智能的技术突破
  • Linux运维新人自用笔记(部署 ​​LAMP:Linux + Apache + MySQL + PHP、部署discuz论坛)
  • 5.安装IK分词器
  • ELK在Java的使用
  • Selenium(选择元素,浏览器/元素操作,等待,页面交互)
  • Windows Python 环境管理终极对比:极简方案 VS 传统方案(仅需 2 个软件实现全流程自动化)
  • Selenium(多窗口,frame,验证码,截图,PO模式)
  • rockx读取单张图片并检测图片内人脸的矩形
  • vite的常用配置
  • 「动态规划::数位DP」统计数字递推 / LeetCode 3352|1012(C++)
  • 线程池(Thread Pool)详解
  • 基于Cesium移动的天空云
  • 【Docker基础】Docker核心概念:命名空间(Namespace)之IPC详解
  • 根据Python模块的完整路径import动态导入
  • 05_MinIO+Java SpringBoot 实现透传代理下载
  • 如何确定驱动480x320分辨率的显示屏所需的MCU主频
  • 为何前馈3DGS的边界总是“一碰就碎”?PM-Loss用“3D几何先验”来解