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

news2024/12/22 19:21:34

引言

在这里插入图片描述

在上一篇中我们介绍了MySQL子句;在开发中,掌握数据的排序、分组、连接等操作和语句是十分重要的。
这一篇我们使用命令行方式来帮助读者掌握MySQL中数据的排序、分组与连接。

上一篇链接: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系列将持续更新,欢迎订阅收藏

在这里插入图片描述

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

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

相关文章

ChatGPT在测试计划中的应用策略

简介 测试计划是指描述了要进行的测试活动的范围、方法、资源和进度的文档。它主要包括测试项、被测特性、测试任务和风险控制等。 所以在使用ChatGPT输出结果之前,我们需要先将文档的内容框架梳理好,以及将内容范围划定好,必要的时候&…

学生学徒作品分享——金融大模型-房屋租金价格影响因素分析与预测

金融大模型-房屋租金价格影响因素分析与预测项目背景 广州作为中国最发达的城市之一,每年都吸引大量务工人员前来就业,而租房是他们需要解决的最大问题之一,各地区租房需求日益增长。在租房过程,价格、交通是重要的考虑因素&a…

vue3同时引入多个iconfont图标库

vue3同时引入多个iconfont图标库 本文目录 vue3同时引入多个iconfont图标库下载iconfont库创建项目库图标加入项目库下载到本地 vue3引入文件存放位置main.ts设置组件中使用 分别引入多个iconfont 下载iconfont库 创建项目库 iconfont官网:https://www.iconfont.c…

物联网_01_物理设备的网络接入

设备的网络接入及物理层使用到的传输协议 现在物理设备有两种接入方式,一种是直接接入另一种是网关接入 直接接入 给物理设备添加NB-IOT通信模组等设备使之具有直接接入网络的能力 网关接入 物理设备在本地组网后通过统一的网关接入到网络(ZigBee无线组网网关).网关是处在本地…

Win10使用nginx,注册到服务设置自启与后台运行,解决 Access is denied 问题

安装 nginx 下载 nginx 官网下载页面:https://nginx.org/en/download.html直接选择当前最新 window 版本的或找到自己需要的版本下载即可 安装使用 下载完成后是有一个压缩包文件,直接解压到自己需要的目录下即可。是免安装的,解压即用简…

2023年中国功能型内窥镜市场发展趋势分析:市场渗透潜力空间广阔[图]

4K内窥镜系统对图像算法存在更高的要求。仅采用软件方式处理图像难以符合4K系统对算力的高要求。其次,针对内窥镜图像的亮暗区域不均匀、饱和度低、细节纹理及组织结构需突出的特点,在选择合适的图像增强算法上难度较大。 功能型内窥镜行业壁垒分析 资料…

Vue动态class

注意在自定义组件上绑定class会添加到该组件的根元素上面 1.对象语法 传入class对象v-bind:class 指令也可以与普通的 class attribute 共存可以动态修改class的值可以绑定一个计算数据来实现 1.传入class对象 <script src"./vue.js"></script><di…

强大的虚拟机软件 VMware Fusion Pro 13中文最新 for mac

VMware Fusion Pro是一款虚拟化软件&#xff0c;它允许在Mac电脑上同时运行Windows和其他操作系统&#xff0c;而无需重启电脑&#xff0c;它采用了领先的虚拟化技术&#xff0c;能够保证在Mac电脑在同时运行多个操作系统时表现出极高的效率和稳定性。 VMware Fusion Pro具有以…

@Binds methods must be abstract 报错指南

bindings方法必须是抽象的 Binds使用错误

页面查询多项数据组合的线程池设计 | 京东云技术团队

背景 我们应对并发场景时一般会采用下面方式去预估线程池的线程数量&#xff0c;比如QPS需求是1000&#xff0c;平均每个任务需要执行的时间是t秒&#xff0c;那么我们需要的线程数是t * 1000。 但是在一些情况下&#xff0c;这个t是不好估算的&#xff0c;即便是估算出来了&…

数据仓库分层

原因 用空间换时间&#xff0c;通过大量的预处理来提升应用系统的用户体验&#xff08;效率&#xff09;&#xff0c;因此数据仓库会存在大量冗余的数据。如果不分层的话&#xff0c;如果源业务系统的业务规则发生变化将会影响整个数据清洗过程&#xff0c;工作量巨大。通过数…

C# Onnx Yolov8 Detect 烟雾检测

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;namespace Onnx…

MAX插件CG Magic怎么云渲染?操作方法已整起!

小编这里会收到不少网友的反馈是关于3ds max插件CG Magic怎么云渲染&#xff1f; 3d max的这款插件CG MAGIC的出现就是为了设计师使用过程中&#xff0c;可以省时又省心的完成工作。 同时&#xff0c;大家要了键下&#xff0c;现阶段CG MAGIC有18个板块&#xff0c;118个模块…

安装Git和git命令使用

文章目录 安装Git创建版本库版本回退工作区和暂存区管理修改撤销修改 安装Git 在Windows上安装Git 在Windows上使用Git&#xff0c;可以从Git官网直接下载安装程序&#xff0c;然后按默认选项安装即可。 安装完成后&#xff0c;在开始菜单里找到“Git”->“Git Bash”&…

三星正在开发HBM4,预计2025年推出

近年来&#xff0c;人工智能&#xff08;AI&#xff09;、高性能计算&#xff08;HPC&#xff09;和PC一直在推动高性能DRAM产品的研发&#xff0c;市场对HBM类DRAM的需求也在迅速增长&#xff0c;各大厂商也加大了这方面的投入。目前HBM市场主要由三星、SK海力士和美光三家存储…

海尔智家亮相广交会:用确定的用户思维,战胜不确定的市场

全球家电市场的不确定性越来越强。 尽管家电行业复苏趋势不改&#xff0c;但是新的问题已显现。据中国机电产品进出口商会数据&#xff0c;今年1-8月&#xff0c;中国白色家电出口额同比下降2%。同时&#xff0c;据媒体报道&#xff0c;在近日举办的中国进出口贸易交易会&…

【红日靶场】vulnstack5-完整渗透过程

系列文章目录 【红日靶场】vulnstack1-完整渗透过程 【红日靶场】vulnstack2-完整渗透过程 【红日靶场】vulnstack3-完整渗透过程 【红日靶场】vulnstack4-完整渗透过程 文章目录 系列文章目录描述虚拟机密码红队思路 一、环境初始化二、开始渗透外网打点上线cs权限提升域信息…

重置手机网络虽然麻烦,但效果杠杠的!如何重置安卓手机的网络

在这篇文章中&#xff0c;我们将探讨你可能需要在Android设备上重置网络设置的原因&#xff0c;并将提供如何重置的分步说明。无论你是遇到连接问题&#xff0c;还是只是想重新开始网络设置&#xff0c;本指南都将引导你完成重置过程。 重置网络设置的原因 在Android设备上重置…

电流监测芯片SGM8199A2应用电路设计

SGM8199是一系列具有电压输出功能的双向电流监测芯片&#xff0c;用于监测共模电压范围内分流电阻上的压降&#xff0c;而不受电源电压的影响。该器件具有-0.1V至26V的宽共模电压范围输入。低偏移使得在监测电流时允许分流器上的满量程最大压降为10mV。SGM8199系列提供三种固定…

高速DSP系统设计参考指南(五)印制电路板或PCB布局

&#xff08;五&#xff09;印制电路板或PCB布局 所有电路设计完成后&#xff0c;下一步是电路板布局。这是开发过程中非常关键的一步&#xff0c;因为滤波电路的有效性取决于元件相对于 DSP引脚的放置位置。此外&#xff0c;电路板布局对噪声、串扰和传输线效应有很大影响&…