MySql常见查询方式详解

今天早睡
今天早睡
发布时间:2026-10-16| 3人浏览过
原创

本文系统梳理MySQL核心数据查询技术,涵盖从简单的数据新增到复杂的聚合统计、分组过滤及多表关联。通过具体SQL语句实例,解析 count、sum、group by、having、inner/left/right join 及自连接等关键操作的实际应用与执行顺序。

数据新增

除了常规的 INSERT INTO 逐条插入,MySQL支持将查询结果直接存入新表或现有表中。这种写法常用于数据备份或日志迁移。

INSERT INTO B SELECT * FROM A;
// 将A表的所有信息通过查询后,批量新增到B表中

聚合查询

聚合函数用于对一组值执行计算并返回单个值,是统计分析中最常用的工具。

记录总数与数值求和

COUNT() 用于统计查询结果集中的行数(总记录数)。SUM() 则用于计算某一列的总和,但仅适用于数值型字段,对非数字内容无意义。

平均值与极值

AVG() 返回平均值,MAX() 返回最大值,MIN() 返回最小值。这三个函数同样主要针对数值类型进行计算,也可用于日期或字符串类型的比较排序。

分组查询

当需要按特定条件归类数据时,需使用 GROUP BY 子句。其执行逻辑是先根据指定条件对数据进行分组,随后对每个分组单独执行聚合函数计算。

SELECT * FROM 表名 GROUP BY 分组条件;

条件筛选:WHERE 与 HAVING 的区别

在数据过滤中,正确选择前置还是后置过滤至关重要,主要区别在于执行阶段:

  • WHERE:在分组之前执行。它用于过滤参与分组的原始记录。
  • HAVING:在分组之后执行。必须搭配 GROUP BY 使用,用于对分组后的聚合结果(如平均薪资、总销量)进行条件筛选。

场景演示:基于角色薪资的平均值筛选

假设需要计算各角色的平均薪资,并希望排除特定人员或设定薪资门槛:

1. 使用 WHERE(分组前过滤):若要求排除“吴九”这个人,无论他薪资高低都不参与平均值的计算,应先用 WHERE 剔除该记录,再进行分组求均值。

2. 使用 HAVING(分组后过滤):若要求“只保留平均薪资在10000以下的角色”,这必须先算出每个角色的平均薪资后才能判断,因此必须使用 HAVING 进行后置筛选。

多表联合查询

之前的查询均为单表操作。多表查询的核心基础是**笛卡尔积**,即将两个表的每条记录分别组合,生成新的记录集合。由于通常不需要所有组合,我们需要通过连接条件筛选有效数据。

连接方式详解

早期的老式写法是多表逗号分隔配合 WHERE 约束,这被称为“隐式内连接”。现代开发推荐使用标准的 JOIN ... ON 语法,语义更清晰且支持内外连接。

  1. 内连接 (INNER JOIN):FROM 表1 INNER JOIN 表2 ON 条件。仅返回两个表中匹配成功的记录。INNER关键字可省略,默认即为内连接。
  2. 左外连接 (LEFT JOIN):FROM 表1 LEFT JOIN 表2 ON 条件。以左表为主,返回左表所有记录,右表若无匹配则填 NULL。
  3. 右外连接 (RIGHT JOIN):FROM 表1 RIGHT JOIN 表2 ON 条件。以右表为主,返回右表所有记录。

自连接

自连接是指同一张表自我关联。常出现在有层级关系或同表横向对比的场景中(如:比较同一学生不同科目分数)。

例如:查询所有“语文”成绩高于“数学”成绩的学生信息。思路是先将表取两个别名(s1代表语文,s2代表数学),通过学生ID建立关联并过滤对应课程ID。

SELECT s1.student_id, s1.score, s2.score 
FROM score AS s1, score AS s2 
WHERE s1.student_id = s2.student_id 
  AND s1.course_id = 3   -- 假设3为语文
  AND s2.course_id = 1   -- 假设1为数学
  AND s1.score > s2.score;

结果集合并查询

当需要从多个查询中提取满足任一条件的数据时,可使用 UNION 操作符,或在简单条件下直接使用 OR。

  • UNION:自动去除结果集中的重复行。
  • UNION ALL:保留所有记录,包含重复项,速度通常比 UNION 稍快。

示例:查询 ID小于3 或 名字为“英文”的课程。

-- 方式一:使用 UNION 拼接两个查询
SELECT * FROM course WHERE id < 3 
UNION 
SELECT * FROM course WHERE name='英文'; 
-- 方式二:使用 OR 逻辑词(简单条件推荐)
SELECT * FROM course WHERE id < 3 OR name='英文';
以上就是关于MySQL各种常见查询方式的详细内容,更多关于MySQL进阶查询技术的资料请关注本站其它相关文章!
相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。