《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查询(进阶)的分享如果有不懂的或者有其他见解的欢迎在下方评论或者私信博主,也希望多多支持博主之后和博客!!🥰🥰

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

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

相关文章

Linux开发讲课20--- QSPI

SPI 是英语 Serial Peripheral interface 的缩写,顾名思义就是串行外围设备接口,一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,为 PCB 的布局上节省空间…

Springcloud-消息总线-Bus

1.消息总线在微服务中的应用 BUS- 消息总线-将消息变更发送给所有的服务节点。 在微服务架构的系统中,通常我们会使用消息代理来构建一个Topic,让所有 服务节点监听这个主题,当生产者向topic中发送变更时,这个主题产生的消息会被…

多线程引发的安全问题

前言👀~ 上一章我们介绍了线程的一些基础知识点,例如创建线程、查看线程、中断线程、等待线程等知识点,今天我们讲解多线程下引发的安全问题 线程安全(最复杂也最重要) 产生线程安全问题的原因 锁(重要…

Hive笔记-6

6.2.8 聚合函数 1) 语法 count(*),表示统计所有行数,包含null值; count(某列),表示该列一共有多少行,不包含null值; max(),求最大值,不包含null,除非所有值都是null&a…

不同node版本的切换及其指定版本vue-cli脚手架下载

目录 一.清空本地已安装node.js版本 二.装nvm管理工具 三.安装指定node版本 四.使用nvm命令切换或删除指定node版本 五.在指定node版本下下载指定vue-cli脚手架 一.清空本地已安装node.js版本 1.按健winR弹出窗口,键盘输入cmd,然后敲回车。 2.输入…

win11 + ubuntu linux双系统:开机直接进入windows修复

https://zhuanlan.zhihu.com/p/666702893 这种 双系统直接进入win 的问题,应该属于引导坏了,即grub坏了。 原因:笔记本送修了,没拆掉硬盘,可能引导被售后搞坏了。 在win-磁盘管理中查看分区,linux的分区…

《SpringBoot+Vue》Chapter04 SpringBoot整合Web开发

返回JSON数据 默认实现 依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>在springboot web依赖中加入了jackson-databind作为JSON处理器 创建一个实体类对象…

学编程容易遇到的误区,请提前规避

随着互联网行业的蓬勃发展和编程技术的普及&#xff0c;越来越多的人开始对编程感兴趣。然而&#xff0c;编程学习并非一蹴而就&#xff0c;新手入门时常常会陷入误区&#xff0c;影响学习状态效率。 今天&#xff0c;我们来一起揭开编程学习常见的五大误区&#xff0c;希望能…

【融合ChatGPT等AI模型】Python-GEE遥感云大数据分析、管理与可视化及多领域案例应用

随着航空、航天、近地空间遥感平台的持续发展&#xff0c;遥感技术近年来取得显著进步。遥感数据的空间、时间、光谱分辨率及数据量均大幅提升&#xff0c;呈现出大数据特征。这为相关研究带来了新机遇&#xff0c;但同时也带来巨大挑战。传统的工作站和服务器已无法满足大区域…

如何激活typora

话不多说&#xff0c;直接上流程。 1、先下载最新的typora安装包&#xff0c;并安装成功。 Typora的安装 &#xff08;1&#xff09;官网下载&#xff1a;https://typora.xnxxxk.cn/index.html?qhclickid777dd93d58082a46 2、下载百度云我上传的两个exe&#xff0c;不大&…

嵌入式实验---实验五 串口数据接收实验

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

Dahlia Hart: Stylized Casual Character(休闲角色模型)

此包包含两个发型和两个服装&#xff0c;每个都有多种颜色选择。每个发型都适合与物理资源一起使用&#xff0c;并包含各种表情和音素混合形状。 下载&#xff1a;​​Unity资源商店链接资源下载链接 效果图&#xff1a;

【机器学习】大模型训练的深入探讨——Fine-tuning技术阐述与Dify平台介绍

目录 引言 Fine-tuning技术的原理阐 预训练模型 迁移学习 模型初始化 模型微调 超参数调整 任务设计 数学模型公式 Dify平台介绍 Dify部署 创建AI 接入大模型api 选择知识库 个人主页链接&#xff1a;东洛的克莱斯韦克-CSDN博客 引言 Fine-tuning技术允许用户根…

数据分析-常用模型-RFM模型

一、RFM模型的底层逻辑 漏斗模型中&#xff0c;大部分业务都是按流程推进&#xff0c;可以做漏斗分析。但是&#xff0c;大家有没有想过一个问题&#xff1a; 如果没有转化过程记录&#xff0c;该怎么办&#xff1f;如果用户行为频率很高&#xff0c;有几十个漏斗&#xff0c…

[数据库]索引机制

目录 索引机制 索引的类型 索引使用 哪些适合添加索引 ​编辑 索引机制 当没有索引的时候, 如下示例,在找到id等于1的时候, 仍然会往下继续查找, 进行全表扫描, 因为它认为下面也有可能还会有1 加上索引之后进行二叉树查找, 找到1之后, 发现1的左边没有了, 右边也没有了就停…

【项目实战】Android Studio简单实现图书馆借阅管理系统

希望文章能给到你启发和灵感&#xff5e; 点赞收藏关注 支持一下吧&#xff5e; 阅读指南 序幕一、基础环境说明1.1 硬件环境1.2 软件环境 二、整体设计2.1 数据库逻辑处理&#xff1a;2.2 登录/注册模块2.3 功能界面初始化&#xff1a;2.4 图书管理模块2.5 图书租借服务2.6 读…

钡铼BL104智慧环保多个485采集转MQTT无线传输

PLC物联网关BL104是一款专为工业环境设计的先进协议转换网关&#xff0c;其集成了钡铼智能技术和环保多个485采集转MQTT无线传输功能&#xff0c;为工业控制系统提供了高效的数据采集、传输和管理解决方案。 技术规格与功能特点 PLC物联网关BL104采用钡铼智能技术&#xff0c…

一招教你用python代码给朋友写一个爱心代码

有人问我马上要跟女朋友一周年了&#xff0c;能不能用代码给他写一个爱心代码呢&#xff1f;那算你问对人了&#xff0c;来上才艺 可以使用Python的turtle模块来绘制一个爱心形状。下面是一个简单的示例代码&#xff0c;我将详细解释每一步&#xff1a; import turtle # 创建一…

回溯法基本思想-01背包、N皇后回溯法图解

基本思想&#xff1a; ​ 回溯法是一种系统地搜索问题解空间的算法&#xff0c;常用于解决组合优化和约束满足问题。其核心思想是利用深度优先搜索逐步构建可能的解&#xff0c;同时在搜索过程中进行剪枝操作&#xff0c;以排除那些无法满足问题约束或不能产生最优解的分支&am…

js修改scss变量

style.scss $color : var(--color,#ccc); // 默认值 #ccc .color{background: $color; } 定义了一个scss变量&#xff08;$color&#xff09;&#xff0c;用普通的css变量&#xff08;--color&#xff09;给他赋值&#xff0c;这里需要一个默认值&#xff0c;此时css变量(--co…