lesson38:MySQL数据库核心操作详解:从基础查询到高级应用

目录

引言

一、条件查询:精准筛选数据

1.1 基本语法

1.2 比较运算符

1.3 逻辑运算符

1.4 特殊条件查询

1.4.1 模糊查询(LIKE)

1.4.2 IN和NOT IN

1.4.3 BETWEEN AND

1.4.4 IS NULL和IS NOT NULL

二、聚合函数:数据统计与分析

2.1 常用聚合函数

2.2 COUNT()的使用

2.3 SUM()和AVG()

2.4 MAX()和MIN()

2.5 聚合函数与DISTINCT

三、分组查询:GROUP BY与HAVING

3.1 GROUP BY基础

3.2 HAVING子句

3.3 GROUP BY与多个列

四、排序:ORDER BY

4.1 基本排序

4.2 多列排序

4.3 排序与聚合函数

五、分页查询:LIMIT

5.1 基本语法

5.2 实际应用

5.3 分页公式

六、去重:DISTINCT

6.1 基本用法

6.2 多列去重

6.3 DISTINCT与聚合函数

七、综合应用:多操作组合

7.1 示例1:复杂条件查询

7.2 示例2:分组统计与排序

7.3 示例3:分页查询热门城市

八、最佳实践与性能优化

8.1 索引优化

8.2 查询优化

8.3 分组和聚合优化

8.4 分页优化

九、常见问题与解决方案

9.1 NULL值处理

9.2 数据类型不匹配

9.3 分组与排序的顺序

十、总结

附录:常用查询示例


引言

MySQL作为一款开源的关系型数据库管理系统,凭借其高效、稳定、易用的特性,成为Web开发领域中最受欢迎的数据库之一。无论是小型网站还是大型企业应用,MySQL都扮演着至关重要的角色。本文将详细介绍MySQL中条件查询、聚合函数、分页、排序、分组和去重等核心操作,帮助读者从基础到进阶,全面掌握MySQL的查询技巧。

一、条件查询:精准筛选数据

条件查询是MySQL中最常用的操作之一,通过WHERE子句可以实现对数据的精准筛选。

1.1 基本语法

SELECT 列名1, 列名2, ...
FROM 表名
WHERE 条件表达式;

1.2 比较运算符

运算符描述示例
=等于WHERE age = 18
<>不等于WHERE age <> 18
>大于WHERE salary > 5000
<小于WHERE score < 60
>=大于等于WHERE quantity >= 100
<=小于等于WHERE price <= 99.99

1.3 逻辑运算符

  • AND:同时满足多个条件

    SELECT * FROM students WHERE age > 18 AND gender = '男';
  • OR:满足任意一个条件

    SELECT * FROM products WHERE price < 50 OR category = '电子产品';
  • NOT:取反

    SELECT * FROM orders WHERE NOT status = '已取消';

1.4 特殊条件查询

1.4.1 模糊查询(LIKE)
  • %:匹配任意字符(包括零个)
  • _:匹配单个字符
-- 查询姓张的学生
SELECT * FROM students WHERE name LIKE '张%';-- 查询第二个字是"小"的学生
SELECT * FROM students WHERE name LIKE '_小%';
1.4.2 IN和NOT IN
-- 查询id为1、3、5的学生
SELECT * FROM students WHERE id IN (1, 3, 5);-- 查询不在北京、上海的学生
SELECT * FROM students WHERE city NOT IN ('北京', '上海');
1.4.3 BETWEEN AND
-- 查询成绩在80到90之间的学生
SELECT * FROM students WHERE score BETWEEN 80 AND 90;
1.4.4 IS NULL和IS NOT NULL
-- 查询没有填写邮箱的学生
SELECT * FROM students WHERE email IS NULL;-- 查询填写了电话的学生
SELECT * FROM students WHERE phone IS NOT NULL;

二、聚合函数:数据统计与分析

聚合函数用于对数据进行统计和计算,返回单个结果值。

2.1 常用聚合函数

函数描述
COUNT()统计记录数
SUM()求和
AVG()平均值
MAX()最大值
MIN()最小值

2.2 COUNT()的使用

-- 统计学生总数
SELECT COUNT(*) AS student_count FROM students;-- 统计有邮箱的学生数
SELECT COUNT(email) AS email_count FROM students;

2.3 SUM()和AVG()

-- 计算所有学生的总分
SELECT SUM(score) AS total_score FROM students;-- 计算平均分
SELECT AVG(score) AS avg_score FROM students;

2.4 MAX()和MIN()

-- 查询最高和最低分
SELECT MAX(score) AS max_score, MIN(score) AS min_score FROM students;

2.5 聚合函数与DISTINCT

-- 统计不同城市的数量
SELECT COUNT(DISTINCT city) AS city_count FROM students;

三、分组查询:GROUP BY与HAVING

3.1 GROUP BY基础

GROUP BY用于将数据按照指定列进行分组,通常与聚合函数一起使用。

-- 按性别分组统计学生数量
SELECT gender, COUNT(*) AS count FROM students GROUP BY gender;-- 按城市分组计算平均分
SELECT city, AVG(score) AS avg_score FROM students GROUP BY city;

3.2 HAVING子句

HAVING用于过滤分组后的结果,类似于WHERE,但WHERE用于分组前过滤,HAVING用于分组后过滤。

-- 找出平均分大于85的城市
SELECT city, AVG(score) AS avg_score 
FROM students 
GROUP BY city 
HAVING avg_score > 85;-- 找出学生数量大于10人的城市
SELECT city, COUNT(*) AS count 
FROM students 
GROUP BY city 
HAVING count > 10;

3.3 GROUP BY与多个列

-- 按城市和性别分组统计
SELECT city, gender, COUNT(*) AS count 
FROM students 
GROUP BY city, gender;

四、排序:ORDER BY

4.1 基本排序

-- 按分数升序排列
SELECT * FROM students ORDER BY score ASC;-- 按分数降序排列
SELECT * FROM students ORDER BY score DESC;

4.2 多列排序

-- 先按城市升序,再按分数降序
SELECT * FROM students ORDER BY city ASC, score DESC;

4.3 排序与聚合函数

-- 按城市分组计算平均分并排序
SELECT city, AVG(score) AS avg_score 
FROM students 
GROUP BY city 
ORDER BY avg_score DESC;

五、分页查询:LIMIT

在处理大量数据时,分页查询非常重要,可以提高查询效率和用户体验。

5.1 基本语法

SELECT * FROM 表名 LIMIT [offset,] rows;
  • offset:起始位置(可选,默认为0)
  • rows:返回行数

5.2 实际应用

-- 获取前10条数据
SELECT * FROM students LIMIT 10;-- 获取第11-20条数据
SELECT * FROM students LIMIT 10, 10;-- 按分数降序,获取前5名学生
SELECT * FROM students ORDER BY score DESC LIMIT 5;

5.3 分页公式

对于第n页,每页显示m条数据:

SELECT * FROM students LIMIT (n-1)*m, m;
-- 第3页,每页10条
SELECT * FROM students LIMIT 20, 10;

六、去重:DISTINCT

DISTINCT用于返回唯一不同的值。

6.1 基本用法

-- 查询所有不同的城市
SELECT DISTINCT city FROM students;

6.2 多列去重

-- 查询不同城市和性别的组合
SELECT DISTINCT city, gender FROM students;

6.3 DISTINCT与聚合函数

-- 统计不同城市的数量
SELECT COUNT(DISTINCT city) AS city_count FROM students;

七、综合应用:多操作组合

在实际应用中,通常需要将多个操作组合使用。

7.1 示例1:复杂条件查询

-- 查询北京或上海的女生,分数在80-90之间,按分数降序排列
SELECT * FROM students 
WHERE (city = '北京' OR city = '上海') 
AND gender = '女' 
AND score BETWEEN 80 AND 90 
ORDER BY score DESC;

7.2 示例2:分组统计与排序

-- 按城市分组,统计每个城市的男生人数和平均分,只显示平均分大于80的,按平均分降序排列
SELECT city, 
COUNT(*) AS male_count, 
AVG(score) AS avg_score 
FROM students 
WHERE gender = '男' 
GROUP BY city 
HAVING avg_score > 80 
ORDER BY avg_score DESC;

7.3 示例3:分页查询热门城市

-- 查询学生数量最多的前5个城市,按数量降序排列
SELECT city, COUNT(*) AS count 
FROM students 
GROUP BY city 
ORDER BY count DESC 
LIMIT 5;

八、最佳实践与性能优化

8.1 索引优化

  • 为WHERE、JOIN、ORDER BY等子句中的列创建索引
  • 避免在索引列上使用函数或表达式
  • 合理设计复合索引

8.2 查询优化

  • 只查询需要的列,避免使用SELECT *
  • 使用EXPLAIN分析查询执行计划
  • 避免在WHERE子句中使用!=、<>、NOT IN等操作符
  • 合理使用连接查询代替子查询

8.3 分组和聚合优化

  • 尽量缩小分组前的数据量
  • 避免在HAVING中使用复杂条件,可先通过WHERE过滤

8.4 分页优化

  • 对于大数据量分页,使用"延迟关联"或"书签"技术
  • 避免使用LIMIT offset过大的值

九、常见问题与解决方案

9.1 NULL值处理

  • NULL与任何值比较都返回NULL
  • 使用IS NULL/IS NOT NULL判断NULL值
  • 聚合函数通常忽略NULL值

9.2 数据类型不匹配

  • 确保比较和计算的数据类型一致
  • 使用CAST()或CONVERT()进行类型转换

9.3 分组与排序的顺序

  • GROUP BY子句在WHERE之后,ORDER BY之前
  • 聚合函数不能直接用于WHERE子句

十、总结

本文详细介绍了MySQL中的条件查询、聚合函数、分组、排序、分页和去重等核心操作。这些操作是MySQL查询的基础,也是进行数据分析和业务开发的必备技能。通过灵活组合这些操作,可以实现复杂的查询需求,高效地处理和分析数据。

在实际应用中,除了掌握基本语法外,还需要关注查询性能优化,合理设计索引,编写高效的SQL语句。同时,要注意处理特殊情况如NULL值、数据类型转换等,确保查询结果的准确性。

希望本文能帮助读者全面理解MySQL的查询操作,为后续的数据库开发和优化打下坚实基础。在实际使用中,建议多练习、多总结,不断提升SQL编写能力。

附录:常用查询示例

  1. 查询每个城市的男生和女生数量及平均分
SELECT 
city,
gender,
COUNT(*) AS count,
AVG(score) AS avg_score
FROM students
GROUP BY city, gender
ORDER BY city ASC, gender ASC;
  1. 查询成绩排名前10%的学生
SELECT * FROM students
WHERE score >= (SELECT AVG(score) FROM students)
ORDER BY score DESC
LIMIT (SELECT COUNT(*) * 0.1 FROM students);
  1. 查询连续三个月没有订单的用户
SELECT user_id, username
FROM users
WHERE user_id NOT IN (
SELECT DISTINCT user_id
FROM orders
WHERE order_date >= DATE_SUB(NOW(), INTERVAL 3 MONTH)
);

通过不断实践这些查询技巧,结合具体业务场景进行灵活运用,相信你一定能成为MySQL查询的高手。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/93160.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/93160.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据分析】调控网络分析:调节因子在肿瘤样本中的表达相关性与生存效应分析

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍 数据准备与模拟 相关性分析与边表生成 网络可视化 结果展示与讨论 加载R包 模拟数据 Spearman 相关 -> 边表 画图 所有代码 总结 系统信息 介绍 在生物医学研究中,N⁶-甲基腺…

Flask中ORM的使用

Flask中ORM的使用 本文介绍Flask中ORM框架flask_sqlalchemy的基本使用&#xff0c;包含模型定义(简单模型&#xff0c;一对一&#xff0c;一对多&#xff0c;多对多等)&#xff0c;由于实际开发中很少使用物理外键&#xff0c;所有本文所有模型都不使用物理外键&#xff0c;而关…

FPGA即插即用Verilog驱动系列——高速12位ADC

实现功能&#xff1a;单通道ADC驱动&#xff0c;速率由驱动的时钟决定12位数据并行&#xff0c;可轻松修改为其他位宽&#xff0c;适应不同的ADC模块将ADC输入的unsigned数据转换为signed&#xff0c;便于后续FIR&#xff0c;MULTI操作匹配AXI4-STREAM协议&#xff0c;有tvalid…

DeepSeek 部署中的常见问题及解决方案:从环境配置到性能优化的全流程指南

一、引言随着大模型技术的发展&#xff0c;以 DeepSeek 为代表的开源中文大模型&#xff0c;逐渐成为企业与开发者探索私有化部署、垂直微调、模型服务化的重要选择。然而&#xff0c;模型部署的过程并非 “一键启动” 那么简单。从环境依赖、资源限制&#xff0c;到推理性能和…

【机器人-开发工具】ROS 2 (4)Jetson Nano 系统Ubuntu22.04安装ROS 2 Humble版本

文章目录1. 系统环境准备1.1. Jetpack简介1.2. 下载Jetpack安装系统2. 安装ROS2 Humble2.1. ROS2 简介2.2. ROS2 Humble对比Foxy版本2.3. 安装2.3.1. 更新系统2.3.2. 添加 ROS 2 GPG 密钥2.3.3. 添加 ROS 2 仓库源2.3.4. 更新软件包索引2.3.5. 安装 ROS 2 Humble 桌面版&#x…

2025年Java大厂面试场景题全解析:高频考点与实战攻略

一、2025年Java面试新趋势与技术栈变化2025年的Java技术生态呈现出明显的云原生与AI集成趋势&#xff0c;各大互联网公司在面试中更加注重候选人对新技术栈的掌握程度和实战应用能力。1.1 技术栈升级趋势分析根据最新统计数据&#xff0c;2025年Java面试的技术考察点分布如下&a…

TCP客户端Linux网络编程设计详解

一、TCP 客户端设计流程TCP客户端模式的程序设计流程主要分为&#xff1a;套接字初始化( socket()函数)&#xff0c;连接目标网络服务器 (connect()函数)&#xff0c;向服务器端写入数据&#xff08;write()函数&#xff09;1、socket() 函数#include <sys/types.h> …

webpack》》

Webpark 介绍 官网 Webpack的功能 在现代前端开发中,我们会使用模块化、Sass、TypeScript、图片、字体等资源。但浏览器并不天然支持这些格式,因此我们需要工具将它们打包、转换成浏览器能识别的文件格式。Webpack 就是这样一个强大的前端构建工具。 Webpack 是一个现代 J…

软件测评中HTTP 安全头的配置与测试规范

服务器若缺乏必要的安全头配置&#xff0c;其安全防护能力将大幅降低。X-Content-Type-Options 作为基础安全头&#xff0c;需设置 nosniff 参数&#xff0c;以阻止浏览器对 MIME 类型进行自主猜测&#xff0c;避免 text/css 等资源被误当作脚本执行&#xff0c;从源头切断此类…

5G专网项目外场常见业务测试指南(六)-PingInfoView

5G项目必然涉及到终端用户的使用&#xff0c;终端使用情况测试最常用的手段就是长时间7*24小时长ping&#xff0c;对于一个有着几百用户的5G专网&#xff0c;我们常用的ping工具-PingInfoView。 PingInfoView是一款轻量级工具&#xff0c;用于同时对多个IP地址或主机名执行持续…

C#WPF实战出真汁02--搭建项目三层架构

1、什么是三层架构 三层架构是一种软件设计模式&#xff0c;将应用程序划分为表示层&#xff08;UI&#xff09;、业务逻辑层&#xff08;BLL&#xff09;和数据访问层&#xff08;DAL&#xff09;&#xff0c;以实现高内聚、低耦合的开发目标。 三层架构的核心组成‌ ‌表示层…

什么是费曼学习法?

什么是费曼学习法&#xff1f;一、费曼学习法的核心逻辑 费曼学习法&#xff08;Feynman Technique&#xff09;由诺贝尔物理学奖得主理查德费曼提出&#xff0c;核心思想是通过“以教促学”的方式&#xff0c;用输出倒逼输入&#xff0c;彻底理解知识。其本质是&#xff1a;当…

CVPR 2025 | 北大团队SLAM3R:单目RGB长视频实时重建,精度效率双杀!

北京大学陈宝权团队联合香港大学等推出的实时三维重建系统SLAM3R&#xff0c;首次实现从单目RGB长视频中实时且高质量重建场景稠密点云。该系统通过前馈神经网络无缝集成局部3D重建与全局坐标配准&#xff0c;提供端到端解决方案&#xff0c;使用消费级显卡&#xff08;如4090D…

现代化水库运行管理矩阵建设的要点

2023年8月24日&#xff0c;水利部发布的水利部关于加快构建现代化水库运行管理矩阵的指导意见中指出&#xff0c;在全面推进水库工程标准化管理的基础上&#xff0c;强化数字赋能&#xff0c;加快构建以推进全覆盖、全要素、全天候、全周期“四全”管理&#xff0c;完善体制、机…

【工具】用于视频遮盖行人及车牌的工具,基于YOLO

最近录制数据时&#xff0c;为了保护隐私&#xff0c;我做了一个小工具&#xff1a;video-privacy-blur 在采集街景、测试视频时&#xff0c;经常会拍到人脸和车牌&#xff0c;这些信息在分享或存储前必须做匿名化处理。手动后期太耗时&#xff0c;于是我基于 Ultralytics YOLO…

EtherCAT概念介绍

一、EtherCAT 简介​EtherCAT&#xff08;Ethernet Control Automation Technology&#xff09;是一种工业以太网现场总线&#xff0c;它将计算机网络中的以太网技术应用于工业自动化领域&#xff0c;构成工业控制以太网&#xff08;工业以太网、工业以太网现场总线&#xff09…

【LeetCode】4. 寻找两个正序数组的中位数

文章目录4. 寻找两个正序数组的中位数题目描述示例 1&#xff1a;示例 2&#xff1a;提示&#xff1a;解题思路算法分析问题本质分析二分查找分割算法详解分割策略可视化分割点计算过程边界情况处理算法流程图各种解法对比时间复杂度分析空间复杂度分析关键优化点实际应用场景测…

HarmonyOS 开发实战:搞定应用名字与图标更换,全流程可运行示例

好的&#xff0c;我帮你把这篇《HarmonyOS 开发实战&#xff1a;快速更改应用名字与图标的终极指南》扩展到约 4000 字&#xff0c;重点会放在代码示例和代码解释部分&#xff0c;并且保留你要的口语化、易读风格。 我会在原文的基础上增加&#xff1a; 更完整的目录结构演示&a…

Keep-Alive 的 “爱情故事”:HTTP 如何从 “短命” 变 “长情”?

&#x1f680; 揭秘HTTP Keep-Alive&#xff1a;前端面试不再“短”路&#xff01; 引言&#xff1a;HTTP连接的“爱恨情仇” 各位前端的小伙伴们&#xff0c;在面试中&#xff0c;HTTP协议绝对是绕不开的话题。而其中一个看似简单却又暗藏玄机的知识点&#xff0c;就是HTTP的“…

仅需8W,无人机巡检系统落地 AI 低空智慧城市!可源码交付

一、项目介绍无人机管控系统是融合无人机技术、传感器技术、物联网及人工智能的智能化检测方案。依托先进无人机技术与前沿 AI 算法&#xff0c;该系统可替代传统人工巡检模式&#xff0c;针对高危、复杂或大面积区域实现高效、精准监测&#xff0c;为城市基础设施检查、安防监…