《mysql篇》--查询(进阶)
目录
将查询结果作为插入数据
聚合查询
聚合函数
count
sum
group by子句
having
联合查询
笛卡尔积
多表查询
join..on实现多表查询
内连接
外连接
自连接
子查询
合并查询
将查询结果作为插入数据
Insert into 表2 select * from 表1//将表1的查询数据插入到表2
查询出来的结果集合,要和插入的这个表的类型一致
举例:insert into student2 (select * from student1);
//student1也可以选择部分数据插入只要类型对应就行
聚合查询
聚合函数
mysql在查找时给我们提供了一些基础的处理数据的函数
表达式查询是针对列和列之间进行运算
聚合查询是行和行之间进行运算
count
举例:select count(math) from score;
还可以使用别名
这里是先执行select math from score在针对结果集合进行统计
//count用来表示查询到的数据的个数
不过这时你可能会有疑问
这个已经可以看到行数了,为啥还要count呢?
7 rows in set是mysql客户端内置的功能,如果你是通过代码来操作mysql服务器,可就没这个功能了,另外count()得到的结果还可以参与各种算术运算,还可以搭配其他sql使用
如果当前查询的列里有null,count(*)和count(具体列)是不同的,如下:
//count(具体列)不会把null算在内
指定具体列时是可以去重的
sum
//用来计算查询的结果集合的总和
举例:
//如果有null也会自动去除
也可以进行表达式查询:
//查询的逻辑是,select Chinese + English + math把对应的列相加,得到一个临时表,再把这个临时表的行与行相加
//当加和的类型是字符串时也是可以加和的,如果字符串是数字字符串则直接转为对应的dobule类型数字,如果不能转则为0;
group by子句
Select 聚合函数(列名) from 表名 group by 列名(根据这个列分组)
举例:
//如果不用聚合函数每一个组对应的数据默认为,在原表中第一次出现的那个;
//如果针对分组后不使用聚合函数,此时的结果就是查询出每一组中的某个代表数据
//往往还是要搭配聚合函数使用,否则这里查询结果就没有意义
having
还可以配条件进行使用
分组之前的条件
这样就把张三排除在外了
分组之后的条件(having 一般写在 group by 后面)
//把平均值大于10000的岗位排除在外
//就是针对select role,avg(salary) from emp group by role;的查询结果进行条件筛选
同时使用两种条件
//即把张三排除在外,又把大与10000的排除在外
联合查询
笛卡尔积
实际开发中往往数据来自不同的表,所以需要多表联合查询。多表查询是对多张表的数据取笛卡尔积
笛卡尔积:笛卡尔积的计算很简单,就类似于排列组合。笛卡尔积是针对任意两张表之间的运算。
可以看作两个表相乘,在数学符号中,如果A = {a, b} 且 B = {1, 2},那么A × B的笛卡儿积为{(a, 1), (a, 2), (b, 1), (b, 2)}。
注意:关联查询可以对关联表使用别名。
使用方法:
select * from 表1,表2.....;
创建两张表
计算笛卡尔积:select * from student,course;
可以看见生成了一个很大的表,这个表就是两张表的笛卡尔积
//计算笛卡尔积时要注意如果两张表数据量都比较大时,就要考虑能不能使用笛卡尔积,因为笛卡尔积的表的数据量是,两张表的乘积如果数据量过大,可能会卡死服务器;
多表查询
我们再创建四张表
insert into classes(name, `desc`) values('计算机系2019级1班', '学习了计算机原理、C和Java语言、数据结构和算法'),
('中文系2019级3班','学习了中国传统文学'),
('自动化2019级5班','学习了机械自动化');insert into student(sn, name, qq_mail, classes_id) values
('09982','张三','xuanfeng@qq.com',1),
('00835','李四',null,1),
('00391','王五',null,1),
('00031','田六','xuxian@qq.com',1),
('00054','赵七',null,1),
('51234','胡八','say@qq.com',2),
('83223','刘九',null,2),
('09527','唐十','foreigner@qq.com',2);insert into course(name) values
('Java'),
('中国传统文化'),
('计算机原理'),
('语文'),
('高阶数学'),
('英文');insert into score2(score, student_id, course_id) values(70.5, 1, 1),
(98.5, 1, 3),(33, 1, 5),(98, 1, 6),
(60, 2, 1),(59.5, 2, 5),(33, 3, 1),
(68, 3, 3),(99, 3, 5),(67, 4, 1),
(23, 4, 3),(56, 4, 5),(72, 4, 6),
(81, 5, 1),(37, 5, 5),(56, 6, 2),
(43, 6, 4),(79, 6, 6),(80, 7, 2),(92, 7, 6);
我们再计算两张表的笛卡尔积时会有很多无效的数据,可以使用where条件进行筛选,筛选出那些有效数据,那么我们基于这个条件就可以进行两张表的查询
比如,我们来查询一下王五的成绩
1.先计算笛卡尔积
select * from student,score2 where student.id = score2.student_id;
//因为可能两张表会有名字一样的列,所以要使用‘.’来明确具体的列
查询结果:
//以上现实的是所有人的成绩
2.筛选出王五
select * from student,score2 where student.id = score2.student_id and name = '王五';
3.筛选出需要的列
上面的表看着还是不太方标,我们可以进一步进行筛选,只要我们想看到的
select student.name,score2.score,score2.course_id from student,score2 where student.id = score2.student_id and name = '王五';
这样就完成了在两个表之间查询
join..on实现多表查询
我们还可以直接使用join..on关键字进行查询
select student.name,score2.score,score2.course_id from student join score2 on student.id = score2.student_id and name = '王五';
//查询结果是一样的
//不过还是更推荐使用第一种
join on还可以一次查询多个只需要在前一个join on后面再加上一个join on就行
比如:
select student.name, course.name, score.score from studentjoin score on student.id = score.student_id
join course on score.course_id = course.id;
内连接
内连接就是要求查询的两个表中都要有数据,如果有一个没有就不会查询
不管使用where,还是join on都默认是内连接
举例:查询所有同学成绩,以及QQ邮箱
select name,qq_mail,score from student,score2 where student.id = score2.student_id;
可以看见,因为唐十没有成绩,所以这里并不会显示他的QQ邮箱
//select 列 from 表1 inner join 表2 on 条件
//这里的inner只有在join on中才能添加,意思是表示内连接(可以省略,因为默认就是内连接)
外连接
外连接和内连接正好相反,外连接是尽可能显示较多的数据,即使表1没有数据为了显示表2数据,也会以null的形式显示表1;
//where不能表示外连接,只有join on可以
外连接分为左外连接和右外连接
左外连接
使用left join on,会以左边表的记录为主,尽可能的把左表记录都列出来,对于没有的右边数据,就改成 null
举例:select name,qq_mail,score from student left join score2 on student.id = score2.student_id;
可以看见即使唐十没有成绩,也会显示他的QQ邮箱
//如果是左表没有数据,那么查询结果回合内连接一样
右外连接
和左外连接相反,右外连接是以右表为基准,尽可能多的显示数据,如果左表没有数据则会显示null;(这里就不多做赘述了)
select 列 from 表1 right/left join 表2 on 条件
//这里的felt和right不可省略
自连接
自连接就是,自己和自己笛卡尔积,也就是左表和右表都是同一个表,用来解决一些特殊问题,可以将行转化成列;
//要将表指定别名,不然自连接就会重名,导致报错。
//在自连接的时候,使用多个条件来完成筛选。
举例:查询即选了1号课程又选了五号课程的同学
select * from score2 as s1,score2 as s2
where s1.student_id = s2.student_id ands1.course_id = 1 and s2.course_id= 5;
子查询
子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询
单行子查询:返回一行记录的子查询
举例:查找张三的同学
//一般我们要先查找张三的班级id
现在将两个sql结合在一起也就是子查询
select name from student where classes_id =
(select classes_id from student where name = '张三');
多行子查询:返回多行记录的子查询
//要把‘=’换成in/not in或者exists/not exists
举例:查询java课程成绩,高阶数学课程成绩
select * from score2 where course_id in
(select id from course where name = 'Java' or name = '高阶数学');
合并查询
在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all。
//就是将查询到的两个结果集合并到一起
//使用union 和union all时,前后查询的结果集中,字段需要一致。
union
union会自动对查询到的两个结果集进行去重
举例:查询Chinese大于90 并且 English 大于 80的学生
select * from score where Chinese > 90unionselect * from score where English > 80;
//相当于 select * from score where Chinese > 90 or English > 80;
union all
union all会显示全部数据不去重
举例:查询Chinese大于90 并且 English 大于 80的学生
select * from score where Chinese > 90union allselect * from score where English > 80;
以上就是博主对mysql查询(进阶)的分享如果有不懂的或者有其他见解的欢迎在下方评论或者私信博主,也希望多多支持博主之后和博客!!🥰🥰
相关文章:

《mysql篇》--查询(进阶)
目录 将查询结果作为插入数据 聚合查询 聚合函数 count sum group by子句 having 联合查询 笛卡尔积 多表查询 join..on实现多表查询 内连接 外连接 自连接 子查询 合并查询 将查询结果作为插入数据 Insert into 表2 select * from 表1//将表1的查询数据插入…...

数据库-MySQL 实战项目——书店图书进销存管理系统数据库设计与实现(附源码)
一、前言 该项目非常适合MySQL入门学习的小伙伴,博主提供了源码、数据和一些查询语句,供大家学习和参考,代码和表设计有什么不恰当还请各位大佬多多指点。 所需环境 MySQL可视化工具:navicat; 数据库:MySq…...

eNSP中WLAN的配置和使用
一、基础配置 1.拓扑图 2.VLAN和IP配置 a.R1 <Huawei>system-view [Huawei]sysname R1 GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]ip address 200.200.200.200 24 b.S1 <Huawei>system-view [Huawei]sysname S1 [S1]vlan 100 [S1-vlan100]vlan 1…...

<sa8650>QCX ID16_UsecaseRawLiteAuto 使用详解
<sa8650>QCX ID16_UsecaseRawLiteAuto 使用详解 一、前言二、ID16_UsecaseRawLiteAuto拓扑图三、UsecaseRawLiteAuto拓扑图 解析3.1 camxUsecaseRawLiteAuto.xml3.2 camxRawLiteAuto.xml四、测试一、前言 我们在使用QCX时,如果由于使用的摄像头自带了ISP,那么可能不需要使…...

为什么3d重制变换模型会变形?---模大狮模型网
在当今数字技术飞速发展的时代,3D建模和动画制作已经成为影视、游戏和虚拟现实中不可或缺的一部分。然而,即使在高级的3D软件中,重制(rigging)和变换(transformation)过程中仍然会面临一个普遍的问题——模型变形。这种变形可能导致动画效果不…...

ElasticSearch中的BM25算法实现原理及应用分析
文章目录 一、引言二、BM25算法实现原理BM25算法的实现原理1. 词频(TF):2. 逆文档频率(IDF):3. 长度归一化:4. BM25评分公式: BM25算法示例 三、BM25算法在ElasticSearch中的应用分析…...

web权限到系统权限 内网学习第一天 权限提升 使用手工还是cs???msf可以不??
现在开始学习内网的相关的知识了,我们在拿下web权限过后,我们要看自己拿下的是什么权限,可能是普通的用户权限,这个连添加用户都不可以,这个时候我们就要进行权限提升操作了。 权限提升这点与我们后门进行内网渗透是乘…...

ros1仿真导航机器人 hector_mapping gmapping
仅为学习记录和一些自己的思考,不具有参考意义。 1 hector_mapping 建图过程 (1)gazebo仿真 roslaunch why_simulation why_slam.launch <launch><!-- We resume the logic in empty_world.launch, changing only the name of t…...

嵌入式实验---实验五 串口数据接收实验
一、实验目的 1、掌握STM32F103串口数据接收程序设计流程; 2、熟悉STM32固件库的基本使用。 二、实验原理 1、STM32F103R6能通过查询中断方式接收数据,每接收到一个字节,立即向对方发送一个相同内容的字节,并把该字节的十六进…...

ubuntu 22.04下编译安装glog共享库
笔者是完美主义者,在编译opencv4.9时,有个有关glog的warn,就下载编译google的glog库并把它编译成shared libaray。重新编译opencv4.9时,该warn解除。现把编译安装glog过程记录,以备后查。 以下操作全程以root身份或sudo执行。 cd…...

Linux环境安装配置nginx服务流程
Linux环境的Centos、麒麟、统信操作系统安装配置nginx服务流程操作: 1、官网下载 下载地址 或者通过命令下载 wget http://nginx.org/download/nginx-1.20.2.tar.gz 2、上传到指定的服务器并解压 tar -zxvf nginx-1.20.1.tar.gzcd nginx-1.20.1 3、编译并安装到…...

设计模式-模板模式
简介 模板方法模式是一种行为设计模式,它在父类中定义了一个操作的算法框架,允许子类在不改变算法结构的情况下重定义算法的某些步骤。这种模式是基于继承的,通过抽象类将通用的代码抽取到超类中,同时通过具体类实现或者改写算法…...

物理删除和逻辑删除区别
物理删除和逻辑删除是数据库管理中针对记录删除操作的两种不同方式,它们的主要区别在于数据的实际处理和后续影响: 物理删除: 操作实质:物理删除会将数据记录从数据库表中彻底移除,包括记录所占的磁盘空间都会被释放。…...

C# 警告 warning MSB3884: 无法找到规则集文件“MinimumRecommendedRules.ruleset”
警告 warning MSB3884: 无法找到规则集文件“MinimumRecommendedRules.ruleset” C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\amd64\Microsoft.CSharp.CurrentVersion.targets(129,9): warning MSB3884: 无法找到规则集文件“MinimumRe…...

Lua网站开发之文件表单上传
这个代码示例演示如何上传文件或图片,获取上传信息及保存文件到本地。 local fw require("fastweb") local request require("fastweb.request") local response require("fastweb.response") local cjson require("cjson&q…...

千益畅行,旅游卡,如何赚钱?
赚钱这件事情,只有自己努力执行才会有结果。生活中没有幸运二字,每个光鲜亮丽的背后,都是不为人知的付出! #旅游卡服务#...

Element-plus点击当前行之后获取数据显示跟随行数据
要实现点击当前行后,在当前行的下方显示数据,可以通过以下步骤来实现: 在表格的行点击事件中获取当前点击行的位置信息。根据位置信息动态计算并设置需要显示数据区域的位置。 下面是一个更新后的示例代码,演示如何在 Element-P…...

Docker与微服务实战2022 尚
Docker与微服务实战2022 尚硅谷讲师:周阳 1. 基础篇(零基小白) 1 1.1. Docker简介 2 1.2. Docker安装 15 1.3. Docker常用命令 29 1.4. Docker镜像 43 1.5. 本地镜像发布到阿里云 50 1.6. 本地镜像发布到私有库 57 1.7. Docker容器数据卷 64 1.8. Docker常规安装简介 …...

Spring @Cacheable缓存注解用法说明
注解Cacheable 是 Spring 框架中用于缓存数据的方法或类的注解。通过使用这个注解,你可以避免重复计算和重复获取数据,从而提高应用程序的性能。 基本用法 引入依赖 确保在你的项目中引入了 Spring Cache 相关的依赖。如果你使用的是 Spring Boot&…...

Redis如何实现主从复制
Redis主从复制包括全量复制和增量复制。主是主服务器,从是从服务器,主服务器(master )的数据如果更新了也会同步到从服务器(slave),一个主服务器可以搭配很多个从服务器,主服务器负责写入,从服务器只能读取…...

正则表达式以及文本三剑客grep、sed、awk
正则表达式匹配的是文本内容,文本三剑客都是针对文本内容。 grep:过滤文本内容 sed:针对文本内容进行增删改查 awk:按行取列 一、grep grep的作用使用正则表达式来匹配文本内容 1、grep选项 -m:匹配几次之后停止…...

HSRP热备份路由协议(VRRP虚拟路由冗余协议)配置以及实现负载均衡
1、相关原理 在网络中,如果一台作为默认网关的三层交换机或者路由器损坏,所有使用该网关为下一跳的主机通信必然中断,即使配置多个默认网关,在不重启终端的情况下,也不能彻底换到新网关。Cisco提出了HSRP热备份路由协…...

不同集成学习算法的比较:随机森林、AdaBoost、XGBoost、LightGBM
好的,我来为您比较一些常见的集成学习算法,并生成表格形式以便于对比: 算法主要思想和特点应用场景并行处理支持稳定性和鲁棒性主要优化策略和技术AdaBoost使用加权投票组合多个弱分类器,逐步提升分类器性能二分类和多分类问题&a…...

【聊聊原子性,中断,以及nodejs中的具体示例】
什么是原子性 从一个例子说起, x ,读和写 , 如图假设多线程,线程1和线程2同时操作变量x,进行x的操作,那么由于写的过程中,都会先读一份x数据到cpu的寄存器中,所以这个时候cpu1 和 c…...

常见网络端口号
在网络工程领域,了解和掌握默认端口号是至关重要的。端口号是计算机网络中最基本的概念之 一,用于标识特定的网络服务或应用程序。 1、什么是端口号? 端口号是计算机网络中的一种标识,用于区分不同的网络服务和应用程序。每个端…...

【数值计算库-超长笔记】Python-Mpmath库:高精度数值计算
原文链接:https://www.cnblogs.com/aksoam/p/18279394 更多精彩,关注博客园主页,不断学习!不断进步! 我的主页 csdn很少看私信,有事请b站私信 博客园主页-发文字笔记-常用 有限元鹰的主页 内容…...

昇思25天学习打卡营第6天|函数式自动微分
函数式自动微分 相关前置知识复习 深度学习的重点之一是神经网络。而神经网络很重要的一环是反向传播算法,这个算法用于调整神经网络的权重。 反向传播算法 这里举例说明反向传播在做什么。 假设你是一个学生,一次考试过后,你收到了一份老…...

作业7.2
用结构体数组以及函数完成: 录入你要增加的几个学生,之后输出所有的学生信息 删除你要删除的第几个学生,并打印所有的学生信息 修改你要修改的第几个学生,并打印所有的学生信息 查找你要查找的第几个学生,并打印该的学生信息 1 /*…...

PCL 点云聚类(基于体素连通性)
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里的思路很简单,我们通过将点云转换为体素,基于体素的连通性实现对点云的聚类(有点类似于欧式聚类),不过这种方式进行的聚类有些粗糙,但聚类速度相对会快很多,具体的实现效果可以详细阅读代码。 二、实现代…...

python自动化运维--DNS处理模块dnspython
1.dnspython介绍 dnspython是Pyhton实现的一个DNS工具包,他几乎支持所有的记录类型,可以用于查询、传输并动态更新ZONE信息,同事支持TSIG(事物签名)验证消息和EDNS0(扩展DNS)。在系统管理方面&a…...