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

mysql-DDLy语句案例

目录

案例要求:

实现思路:

代码:

总结:


案例要求:

案例 按照需求完成如下 DQL 语句编写

  1. 查询年龄为 20,21,22,23 岁的员工信息。
  2. 查询性别为 男,并且年龄在 20 - 40 岁 (含) 以内的姓名为三个字的员工。
  3. 统计员工表中,年龄小于 60 岁的,男性员工和女性员工的人数。
  4. 查询所有年龄小于等于 35 岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序。
  5. 查询性别为男,且年龄在 20 - 40 岁 (含) 以内的前 5 个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。

实现思路:

本文解析了5条MySQL查询语句,涵盖常见数据查询需求:1)查询指定年龄段的员工信息;2)筛选符合多重条件的员工(性别、年龄范围、姓名长度);3)按性别统计60岁以下员工数量;4)查询35岁以下员工并按年龄和入职时间排序;5)获取20-40岁男性员工前5条记录并排序。每条语句详细解析了语法结构、执行逻辑、业务场景和使用注意事项,重点说明了IN、BETWEEN、LIKE等运算符以及GROUP BY、ORDER BY、LIMIT等关键字的用法规则,为数据库查询操作提供了实用指导。

代码:

-- SELECT * FROM tb_user WHERE age IN(20,21,22,23)

-- SELECT * FROM tb_user WHERE sex='男' AND age BETWEEN 20 and 40 AND name LIKE '___';

-- SELECT sex, COUNT(*) FROM tb_user where age<60  GROUP BY sex

-- SELECT name, age FROM tb_user WHERE age<=35 ORDER BY age ,entry_time DESC

SELECT * FROM tb_user WHERE sex='男' AND age BETWEEN 20 and 40  ORDER BY age,entry_time LIMIT 0,5

以下是对这 5 条 MySQL 查询语句的详细解析,从语法结构、执行逻辑、业务场景到注意事项进行全面说明,帮助深入理解每条语句的功能与原理:

一、SELECT * FROM tb_user WHERE age IN(20,21,22,23)

1. 语法结构拆解

  • SELECT *:表示查询表中所有字段(如idnamesexageentry_time等),*是通配符,指代表结构定义的全部列。

  • FROM tb_user:指定查询的数据来源为tb_user表(用户表),tb_user是表名,需确保该表在当前数据库中存在且名称正确。

  • WHERE age IN(20,21,22,23):筛选条件,age是字段名,IN(...)是比较运算符,括号内为一组离散值,用于匹配age等于其中任意一个值的记录。

2. 执行逻辑与等价转换

  • 该语句的执行逻辑是:从tb_user表中,找出所有 “年龄为 20 岁、21 岁、22 岁或 23 岁” 的用户,返回这些用户的完整信息。

  • 等价于使用OR连接的多条件查询:

    sql

    SELECT * FROM tb_user WHERE age=20 OR age=21 OR age=22 OR age=23;
    


    IN的写法更简洁,尤其当目标值数量较多时(如 10 个以上),可显著减少代码冗余,提高可读性。

3. 业务场景与使用注意

  • 典型场景:适用于需要筛选 “年龄属于特定几个离散值” 的用户,例如:

    • 统计公司中 20-23 岁的年轻员工数量;

    • 筛选某平台中这几个年龄段的用户参与针对性活动(如校园招聘宣传)。

  • 注意事项

    • IN括号内的值必须与age字段的类型一致(此处age为数值型,直接写数字;若为字符串型需加单引号,如IN('20','21'))。

    • 若括号内包含NULLIN不会匹配NULL值(需用IS NULL单独判断)。

    • 当值列表过长时(如超过 1000 个),可能影响查询性能,建议改用JOIN关联表查询。

二、SELECT * FROM tb_user WHERE sex='男' AND age BETWEEN 20 and 40 AND name LIKE '___'

1. 语法结构拆解

  • SELECT *:查询所有字段,返回符合条件的用户完整信息。

  • FROM tb_user:数据来源为tb_user表。

  • WHERE子句包含三个并列条件,用AND连接,表示 “同时满足”:

    • sex='男'sex字段值为 “男”(字符串需用单引号包裹,区分大小写取决于数据库配置)。

    • age BETWEEN 20 and 40age字段值在 20 到 40 之间,包含 20 和 40(等价于age >=20 AND age <=40)。

    • name LIKE '___'name字段值为 3 个字符(_是通配符,匹配单个任意字符,三个_严格匹配 3 个字符长度)。

2. 执行逻辑与条件优先级

  • 执行逻辑:从tb_user表中,筛选出 “性别为男、年龄 20-40 岁(含)、姓名为 3 个字” 的用户,返回其所有信息。

  • 条件优先级:AND连接的多个条件无优先级差异,按顺序依次判断,只有全部满足时才会被选中。例如:

    • 若某用户性别为男、年龄 30 岁,但姓名是 2 个字(如 “张三”),会被name LIKE '___'排除;

    • 若姓名是 3 个字、年龄 35 岁,但性别为女,会被sex='男'排除。

3. 业务场景与细节说明

  • 典型场景:用于精准定位符合多重条件的用户,例如:

    • 企业 HR 筛选 “3 字姓名、20-40 岁男性员工” 参加特定培训;

    • 电商平台针对 “3 字姓名的中青年男性用户” 推送相关商品。

  • 细节说明

    • BETWEEN ... AND ...的边界值包含关系:若用户年龄刚好为 20 或 40,会被包含在内(如需排除边界,需用age >20 AND age <40)。

    • LIKE '___'的字符匹配规则:仅匹配长度为 3 的字符串,如 “张三丰”“李四军” 会被选中,而 “张小三”(4 字)、“王二”(2 字)会被排除。对于中文姓名,每个汉字占 1 个字符位置,符合中文命名习惯。

    • 字符串大小写:若数据库 collation 为区分大小写(如utf8_bin),'男''男'(全角 / 半角差异)会被视为不同值,需确保条件值与表中数据格式一致。

三、SELECT sex, COUNT(*) FROM tb_user where age<60 GROUP BY sex

1. 语法结构拆解

  • SELECT sex, COUNT(*):查询结果包含两列,sex(性别)和COUNT(*)(统计数量)。COUNT(*)是聚合函数,用于计算每组的记录条数。

  • FROM tb_user:数据来源为tb_user表。

  • WHERE age<60:筛选条件,仅处理 “年龄小于 60 岁” 的记录(排除 60 岁及以上的用户)。

  • GROUP BY sex:分组条件,将筛选后的记录按sex字段分组(通常分为 “男”“女” 两组,若存在其他性别值则对应分组)。

2. 执行逻辑与分组统计原理

  • 执行逻辑:

    1. 先通过WHERE age<60筛选出所有年龄小于 60 岁的用户;

    2. 将这些用户按sex字段分组(如 “男” 一组,“女” 一组);

    3. 对每个分组使用COUNT(*)计算该组的记录数,最终返回 “性别 + 对应人数” 的统计结果。

  • 示例结果(假设数据):

    sex

    COUNT(*)

    120

    80

    表示 “年龄小于 60 岁的用户中,男性 120 人,女性 80 人”。

3. 业务场景与聚合函数说明

  • 典型场景:用于数据统计分析,例如:

    • 企业统计 “非退休年龄(<60 岁)员工的性别分布”;

    • 平台分析 “60 岁以下用户的性别比例”,辅助产品定位。

  • 聚合函数与分组规则

    • COUNT(*):统计组内所有记录的数量(包括NULL值字段的记录);若需排除NULL,可使用COUNT(字段名)(如COUNT(id),统计非NULLid数量)。

    • GROUP BY的核心规则:SELECT后除聚合函数外的字段,必须出现在GROUP BY中(否则会报错或返回不可预期的结果)。此处sexGROUP BY中,符合规则。

    • 若需对分组结果再次筛选,需用HAVING(而非WHERE),例如 “统计性别分组中人数超过 100 的组”:

      sql

      SELECT sex, COUNT(*) FROM tb_user WHERE age<60 GROUP BY sex HAVING COUNT(*)>100;
      

四、SELECT name, age FROM tb_user WHERE age<=35 ORDER BY age, entry_time DESC

1. 语法结构拆解

  • SELECT name, age:仅查询name(姓名)和age(年龄)两个字段,减少不必要的数据传输。

  • FROM tb_user:数据来源为tb_user表。

  • WHERE age<=35:筛选条件,仅处理 “年龄小于等于 35 岁” 的用户。

  • ORDER BY age, entry_time DESC:排序条件,age为第一排序字段(默认升序ASC),entry_time(入职时间)为第二排序字段(DESC表示降序)。

2. 执行逻辑与排序规则

  • 执行逻辑:

    1. 筛选出所有年龄≤35 岁的用户;

    2. 先按age升序排序(年龄从小到大);

    3. 对于年龄相同的用户,再按entry_time降序排序(入职时间从晚到早);

    4. 最终返回这些用户的nameage字段。

  • 示例排序结果(假设数据):

    name

    age

    entry_time

    张三

    25

    2023-05-01

    (25 岁中入职最晚)

    李四

    25

    2023-04-15

    (25 岁中入职较早)

    王五

    30

    2022-12-01

    (30 岁中入职最晚)

    可见,25 岁用户排在 30 岁之前(age升序),同年龄中后入职的排在前(entry_time降序)。

3. 业务场景与排序细节

  • 典型场景:用于按特定维度排序展示数据,例如:

    • 企业 HR 查看 “35 岁及以下员工的姓名和年龄”,按年龄从小到大排列,同年龄者晚入职的优先展示(便于关注新员工);

    • 教育平台展示 “35 岁以下学员” 的基本信息,按年龄排序便于分析年轻用户分布。

  • 排序细节

    • 多字段排序:ORDER BY后可跟多个字段,优先级从左到右依次降低(先按第一个字段排,相同再按第二个,以此类推)。

    • 升序与降序:默认ASC(升序),可省略;DESC(降序)需显式指定。例如ORDER BY age DESC, entry_time表示 “先按年龄从大到小,同年龄按入职时间从小到大”。

    • NULL值处理:若entry_time存在NULL(未填写入职时间),NULL会被视为最小值,在DESC排序中会排在最后(所有有值的记录之后)。

五、SELECT * FROM tb_user WHERE sex='男' AND age BETWEEN 20 and 40 ORDER BY age, entry_time LIMIT 0,5

1. 语法结构拆解

  • SELECT *:查询所有字段,返回符合条件的用户完整信息。

  • FROM tb_user:数据来源为tb_user表。

  • WHERE sex='男' AND age BETWEEN 20 and 40:筛选条件,“性别为男且年龄 20-40 岁(含)”。

  • ORDER BY age, entry_time:排序条件,先按age升序(默认),同年龄按entry_time升序(默认,入职时间从早到晚)。

  • LIMIT 0,5:限制返回结果,0表示起始位置(从第 1 条开始,索引从 0 起),5表示返回 5 条记录。

2. 执行逻辑与限制返回原理

  • 执行逻辑:

    1. 筛选出 “男性、20-40 岁” 的用户;

    2. 按 “年龄从小到大,同年龄入职时间从早到晚” 排序;

    3. 从排序后的结果中,取前 5 条记录返回。

  • 示例结果:若符合条件的用户有 20 人,排序后取前 5 条,即年龄最小的 5 人(若年龄相同,取入职最早的)。

3. 业务场景与LIMIT用法

  • 典型场景:用于分页查询或取 “Top N” 数据,例如:

    • 企业筛选 “20-40 岁男性员工”,按年龄排序后取前 5 人参加项目;

    • 电商平台展示 “符合条件的前 5 名用户” 信息,用于列表页第一页展示。

  • LIMIT用法细节

    • 语法格式:LIMIT 起始索引, 记录数,起始索引从 0 开始(LIMIT 0,5等价于LIMIT 5)。

    • 分页应用:若需查询第 2 页(每页 5 条),可写LIMIT 5,5(从第 6 条开始,取 5 条)。

    • ORDER BY的配合:LIMIT必须放在ORDER BY之后,否则会先截取数据再排序,导致结果错误(如先取 5 条再排序,可能漏掉实际应排在前面的记录)。

    • 性能优化:对于大表查询,LIMIT配合ORDER BY时,建议在排序字段上建立索引(如ageentry_time的联合索引),提高查询速度。

总结

这 5 条语句覆盖了 SQL 中条件筛选WHERE)、离散值匹配IN)、范围查询BETWEEN)、模糊匹配LIKE)、分组统计GROUP BY+ 聚合函数)、排序ORDER BY)、结果限制LIMIT)等核心操作,是数据查询与分析的基础工具。

每条语句的设计都遵循 “先筛选、再处理(分组 / 排序)、最后返回结果” 的逻辑,且语法顺序严格对应执行流程(WHEREGROUP BYORDER BYLIMIT)。实际使用时,需根据表结构、数据分布及业务需求调整字段名和条件,同时注意索引优化以提升查询效率。理解这些语句的原理,有助于构建更复杂的查询(如多表关联、子查询),应对更灵活的数据分析场景。

总结:

本文解析了5条MySQL查询语句,涵盖常见数据查询需求:1)查询指定年龄段的员工信息;2)筛选符合多重条件的员工(性别、年龄范围、姓名长度);3)按性别统计60岁以下员工数量;4)查询35岁以下员工并按年龄和入职时间排序;5)获取20-40岁男性员工前5条记录并排序。每条语句详细解析了语法结构、执行逻辑、业务场景和使用注意事项,重点说明了IN、BETWEEN、LIKE等运算符以及GROUP BY、ORDER BY、LIMIT等关键字的用法规则,为数据库查询操作提供了实用指导。

http://www.lryc.cn/news/622293.html

相关文章:

  • Unity 实现逼真书本翻页效果
  • 电子电气架构 --- 线束设计一些事宜
  • Linux软件编程-进程(2)及线程(1)
  • TDengine IDMP 高级功能(2. 事件模板)
  • 低资源语言翻译:数据增强与跨语言迁移学习策略
  • 第二十四天:虚函数与纯虚函数
  • 订单状态定时处理(Spring Task 定时任务)
  • OpenTelemetry WebSocket 监控终极方案:打通最后一公里
  • liteflow
  • kubernetes(4) 微服务
  • C#文件复制异常深度剖析:解决“未能找到文件“之谜
  • 大白话解析 Solidity 中的防重放参数
  • 大白话解析 Solidity 中的数据位置关键字 memory
  • [激光原理与应用-284]:理论 - 波动光学 - 无线电波,无线通信的频谱
  • 人工智能与社会治理:从工具到生态的范式重构
  • 数据民主化×智能进阶化:AI+BI不可逆的决策革命已至
  • Python 高级语法与用法详解 —— 提升编程效率与代码质量
  • JUC LongAdder并发计数器设计
  • Manus AI与多语言手写识别
  • 项目生命周期
  • stream流debug
  • 源码分析mcp定义tools映射到LLM输入的过程
  • L4 级别自动驾驶 软件架构设计
  • Midjourney绘画创作入门操作
  • 二十四、Mybatis-基础操作-删除(预编译SQL)
  • 什么是可信空间的全域节点、区域节点、业务节点?
  • 基于STM32与边缘计算的工业设备异常振动预警系统设计
  • Pytest 插件使用指南:让你的测试更高效
  • 深度解读 Browser-Use:让 AI 驱动浏览器自动化成为可能
  • 如何回答研究过MQ的源码吗