2025年【MySQL进阶之路丨第十篇】一文带你精通MySQL排序、分组、连接

【MySQL进阶之路丨第十篇】一文带你精通MySQL排序、分组、连接引言 在上一篇中我们介绍了 MySQL 子句 在开发中 掌握数据的排序 分组 连接等操作和语句是十分重要的 这一篇我们使用命令行方式来帮助读者掌握 MySQL 中数据的排序 分组与连接 上一篇链接 MySQL 一文带你精通 MySQL 子句 MySQL 排序 MySQL 中可以使用 ORDER BY

大家好,我是讯享网,很高兴认识大家。

引言

在这里插入图片描述
讯享网

上一篇链接:MySQL | 一文带你精通MySQL子句


MySQL排序

MySQL中可以使用ORDER BY语句对查询结果进行排序。ORDER BY语句按照指定的列或表达式对结果进行排序,可以按升序(默认)或降序排列。

模板如下:

SELECT column1, column2, ... FROM table ORDER BY { 
  
    
  { 
  
    
  column}} { 
  
    
  { 
  
    
  order}}; 

讯享网

将需要排序的列名替换为{ {column}},并将排序顺序(ASC或DESC)替换为{ {order}}

MySQL中可以使用ORDER BY语句对查询结果进行排序。ORDER BY语句按照指定的列或表达式对结果进行排序,可以按升序(默认)或降序排列。

以下是一些常见的排序示例:

1.按单个列排序:

讯享网SELECT column1, column2, ... FROM table ORDER BY column1 ASC; -- 按升序排序 

或:

SELECT column1, column2, ... FROM table ORDER BY column1 DESC; -- 按降序排序 

2.按多个列排序:

讯享网SELECT column1, column2, ... FROM table ORDER BY column1 ASC, column2 DESC; -- 先按column1升序排序,再按column2降序排序 

3.对计算列或表达式进行排序:

SELECT column1, column2, expression AS alias FROM table ORDER BY alias ASC; -- 按计算列或表达式的升序排序 

举个例子,目前存在users表如图所示:

在这里插入图片描述

我们会发现,username一列十分的杂乱,于是我们尝试将其按字母升序排列

语句如下:

讯享网SELECT username FROM users ORDER BY username ASC; 

从结果中可以看到,username列已经被升序排列了

在这里插入图片描述

那么如果我对username列进行升序,对password列进行降序,又会怎么样呢?

SELECT username,password FROM users ORDER BY username ASC,password DESC; 

通过下面的回显我们会发现,sql语句的升序功能实现了,但降序功能并没有实现,这是因为username与password是一一对应的关系,如果用户名的升序功能实现,密码的降序功能也实现,那么就会使原始数据顺序被打乱,造成a的密码不再是a的密码了

在这里插入图片描述


MySQL分组

GROUP BY 语句根据一个或多个列对结果集进行分组,进而执行聚合操作。在分组的列上我们可以使用聚合函数。

一些常见的聚合函数包括:

  • COUNT():计算每个分组中的行数。
  • SUM():计算每个分组中某一列的总和。
  • AVG():计算每个分组中某一列的平均值。
  • MAX():找出每个分组中某一列的最大值。
  • MIN():找出每个分组中某一列的最小值。

分组基本语法如下:

讯享网SELECT column_name, function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name; 

举个例子,现有一个职工表employees:

在这里插入图片描述

我们按照department列对employees表进行分组。然后,我们计算了每个部门中的员工数量(使用COUNT(*)),以及平均工资(使用AVG(salary)

SELECT department, COUNT(*) as count, AVG(salary) as avg_salary FROM employees GROUP BY department; 

结果如下所示:

在这里插入图片描述


MySQL连接

在前几篇中,我们已经学会了如何在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据。

接下来将向大家介绍如何在两个或多个表中查询数据。

在MySQL中,我们可以使用多种方法进行多表查询,如使用JOIN子句、子查询、UNION操作等。下面介绍一些常用的多表查询方法。

1.使用JOIN子句:JOIN子句用于根据两个或多个表之间的关联关系将它们连接起来。常见的JOIN类型有INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN。

讯享网SELECT * FROM table1 JOIN table2 ON table1.column = table2.column; 

在这个示例中,我们使用INNER JOIN将table1和table2两个表连接在一起,并使用ON子句指定它们之间的关联条件。

2.使用子查询:你可以在查询语句中嵌套子查询,将一个查询的结果作为另一个查询的源数据。

SELECT column1, column2 FROM table1 WHERE column1 IN (SELECT column3 FROM table2); 

在这个示例中,我们使用子查询将table2中的column3作为过滤条件,仅返回table1中与之关联的记录。

3.使用UNION操作:UNION操作用于将两个或多个查询的结果合并成一个结果集。

讯享网SELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2; 

在这个示例中,我们将table1和table2的查询结果合并为一个结果集,并且确保两个查询的列数和列类型相同。

本文中重点学习JOIN子句

JOIN 按照功能大致分为如下三类:

  • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。

简单来说就是两个集合取交集的意思。

在这里插入图片描述

语法如下:

SELECT1.1,1.2, ...,2.1,2.2, ... FROM1 INNER JOIN2 ON1.=2.; 
  • LEFT JOIN(左连接): 获取左表所有记录,即使右表没有对应匹配的记录。

简单来说就是:

在这里插入图片描述

语法如下:

讯享网SELECT1.1,1.2, ...,2.1,2.2, ... FROM1 LEFT JOIN2 ON1.=2.; 
  • RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

简单来说就是:

在这里插入图片描述

语法如下:

SELECT1.1,1.2, ...,2.1,2.2, ... FROM1 LEFT JOIN2 ON1.=2.; 

举个例子:

先有两个表,分别如下所示

在这里插入图片描述

在这里插入图片描述

接下来我们就使用MySQL的INNER JOIN来连接以上两张表,从而读取1—tbl表中所有author字段在2—tbl表对应的count字段值:

讯享网SELECT a.author, b.count FROM 1—tbl a INNER JOIN 2—tbl b ON a.author = b.author; 

相当于

SELECT a.author, b.count FROM 1—tbl a, 2—tbl b WHERE a.author = b.author; 

结果如下所示:

在这里插入图片描述

使用LEFT JOIN如下:

讯享网SELECT a.author, b.count FROM 1—tbl a LEFT JOIN 2—tbl b ON a.author = b.author; 

相当于:

SELECT a.author, b.count FROM 1—tbl a, 2—tbl b WHERE a.author = b.author OR b.author IS NULL; 

回显如下:

在这里插入图片描述

可以看到,语句返回了1—tbl中的bbb

使用RIGHT JOIN也是一样的:

讯享网SELECT a.author, b.count FROM 1—tbl a RIGHT JOIN 2—tbl b ON a.author = b.author; 

相当于:

SELECT a.author, b.count FROM 1—tbl a, 2—tbl b WHERE a.author = b.author OR a.author IS NULL; 

由于2—tbl中并没有另外的author,因此这个语句返回的数据与INNER JOIN相同:

在这里插入图片描述

至此,MySQL多表查询就介绍完了,希望读者躬身实践。


总结

以上为 【MySQL进阶之路丨第十篇】,带领读者掌握 MySQL 排序、分组与连接,通过具体实操实现对MySQL数据库的深度理解。MySQL系列将持续更新,欢迎订阅收藏

在这里插入图片描述

小讯
上一篇 2025-03-12 18:41
下一篇 2025-02-25 17:25

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/57653.html