MySQL的聚合查询,分组查询,连接查询(内,外连接),子查询,联合查询

目录

一、聚合查询:

①下面,先介绍第一个关键字:sum

②第二个关键字:count:用于计算某一张表中/或者某一类当中,有多少行:

③第三个关键字:max,顾名思义,求某一列的最大值:

④第四个关键字:avg:求某一列的平均值:

二、分组查询:group by

三、连接查询

 ⑤子查询

三、联合查询(union)

四,mysql删除表的方式,有什么不同?

      ①使用drop关键字(丢弃数据)

      ②truncate(清空数据)   

      ③delete(删除数据)

五、DDL&DQL&DML&DCL的区别

DDL(database、table)

DQL(数据查询语言)

DML

DCL(权限)

六、left join,right join,inner join,笛卡尔积的区别

INNER JOIN(或 JOIN):

LEFT JOIN(或 LEFT OUTER JOIN):

RIGHT JOIN(或 RIGHT OUTER JOIN):

两个表的笛卡尔积(Cartesian Product)**


一、聚合查询:

这种查询,都是需要使用到聚合的关键字。

①下面,先介绍第一个关键字:sum

这个关键字的含义是针对某一列来求和。

但是需要注意的是,该列一定需要是可以进行数字运算的列,否则不可以进行聚合运算(sum)

②第二个关键字:count:用于计算某一张表中/或者某一类当中,有多少行:

如果sql语句为:select count(*) from +表名称,说明,查询此表当中存在多少行,如果有某一行的属性全部为空,那么这一行将不算在内。同时,也可以把*替换为具体的某一列:

如图:

 如果输入select count(grade) from+表名称,那么会返回2.

③第三个关键字:max,顾名思义,求某一列的最大值:

④第四个关键字:avg:求某一列的平均值:

 但是如果该列当中出现了为NULL的元素,那把该元素排除,不计算包括这个属性在内的平均值。

⑤第五个关键字:MIN()

求某一列当中的最小值,如果存在为NULL的情况,那么不把NULL看在内:

二、分组查询:group by

分组查询,需要使用到关键字 group by;同时,分组查询一般需要搭配聚合函数,也就是上面介绍的5种聚合函数使用,这样才有意义:

举个例子:

如图所示,为一张员工表,表的结构为:staffId:员工的id主键,名称,年龄,以及部门的id:

其中,部门id相同的成员就是在同一个部门;

这里存在一个问题,前面说过,分组查询一般需要搭配聚合函数来使用,那么这里,如果不搭配聚合函数,直接使用group by,结果会怎样呢?试一下:可以看出,查出来的只是每个部门的第一个员工的年龄,而这种操作,明显没什么意义。

如果把以上sql语句翻译过来,就是:查询每个部门的年龄;这种查询,显然意义不大。

 如果把需求变成:查询每个部门的最大/平均年龄,那这种操作,就会有他特定存在的意义了。

比如:

select max(age),depart_Id from staff group by depart_Id
那这样的化,查出来的就是每个部门的平均年龄,于是有了分组查询的意义。

同理,如果想查询每个部门的平均年龄,就可以把sql语句写成:

select avg(age),depart_Id from staff group by depart_Id

三、连接查询

   ①内连接查询:

是指所有查询出的结果都是能够在连接的表中有对应记录的。需要使用到关键字:inner join:

如图所示,为两张表:

一张为student5的表:里面存储了4个成员变量

  

  另外的,如图所示:下面这个表存放的是学生的考试成绩:

如果想查询出所有参与了考试,并且有学号记录的同学的成绩,就需要使用inner join来查询:

select *from score inner join student5 on score.studentId = student5.id

查询结果如图:

②左外连接:
 

其中,student5表当中,有一条数据,也就是最后一条,没有出现在成绩表当中。同时,在成绩表当中,最后一条数据也没有出现在学生表当中,这种情况下面,如果想查看所有同学的考试,包括缺考的同学在内的话,应该如何查询呢?首先,引入了连接查询join。

由于此处想查看出学生表的所有信息,但是不一定包含右表当中的所有信息,应当这样查询:

select student5.id,student5.name,score.score

from student5 left join score on student5.id=score.studentId

 查询结果如下:

 其中,这个查询的规则是:首先确定需要查询两张表的哪些属性,使用表名称.属性名称的形式,列举。接着,使用from 关键字连接需要查询全部数据的表,上图为student5,使用left join 关键字,拼接需要查询的右表,on 后面跟着的是查询的条件。

于是,这样就查询出来了。同样,如果想查询所有参与了考试的学生的信息,可以使用以下的方式

③右外连接:

 以上两条查询,可以得出:如果使用left join,那么数据完整的表应当为left join左边的表,如果使用right join,那么完整数据的表为右边的表。

④自连接:(查询两行之间的关系,二者进行比较)

如图所示:如果想查询出score1的成绩比score高的行,就出现了一个问题:由于sql无法针对行之间进行比较,那应当怎样查询呢?

这里就引入了一个概念:自连接:即:一个表关联他自己

第一步:根据表来取别名:

由于自连接也会产生大量的无效数据,因此也需要指定查询条件s1.studentId=s2.studentId;

select *from score as s1,score as s2 where s1.studentId=s2.studentId

 得到结果如下:(红线左侧为s1,红线右侧为s2)

 那么,上述条件是否可以转化为:s1当中score1比s2当中score大的值的集合:

select *from score as s1,score as s2 where 
s1.studentId=s2.studentId and s1.score1>s2.score

 

 ⑤子查询

    一个sql当中,把另外一个sql查询的结果当成条件,来拼接成的一个新的sql语句。

继续回到这个表当中:如果想查询score+scor1大于220的同学的行数,可以这样查询:

(但是不推荐这样操作)

select *from score where studentId in
                         (select studentid from score where (score+score1)>220)

 需要使用 in 关键字(当返回的列数>1时候), 在后面的表达式当中,返回的是,score+score1>200的studentID。如果仅仅有1行返回的话,可以把in替换为=

但是由于这样比较复杂,不易于代码的维护,因此这种做法不常用。

三、联合查询(union)

如图所示:此为一个student表:

表的结构是:name varchar(20),age int

此时,如果想查询出age<15或者age>25的列数,可以这样查询(使用关键字:or)

select *from student where  age>25 or age<15

 但是,or关键字只能查询出本表当中的数据,无法查询出不同的两个表并在一起的结果。

倘如有另外一张表,列数和当前表的一模一样,那就可以进行联合查询,使用(union)

如图所示,为两张相同的表;结构都是name varchar(20),age int

\

 如果想原封不动查看两个表的所有数据,就使用union all来查询:哪怕另外一张表中含有第一张表重复的数据;

select *from student6 union all(select *from student)

但是如果想查询第一张表当中的所有数据,但是第二张表里面不包括跟第一张表重复的数据,就使用union:

select * from student6 union (select *from student)

 如果这样查询,就可以查询出student6当中所有的数据,但是如果student当中出现了和student6当中相同的数据,那么不会重复出现:


四,mysql删除表的方式,有什么不同?

      ①使用drop关键字(丢弃数据)

       用法:drop table+表名称。

       这样会直接把一整张表删除,包括表的结构和表当中的所有数据,相当于这张表从磁盘上面彻底消失。


      ②truncate(清空数据)   

       用法:truncate table +表的名称。

       需要注意的是,truncate有点类似于恢复"出厂设置"。

       执行了truncate table+表的名称这条命令之后,表当中的数据全部删除,如果存在自增的主键,当再次插入数据的时候,就会从1重新开始。


      ③delete(删除数据)

        用法:delete from table(删除全部数据)或者delete from table where ...

        和truncate不同的是:

        (1)delete可以指定删除某一行数据,可以根据条件删除;

        (2)使用delete删除数据之后,如果表当中存在自增的主键,那么下次新增数据的时候,仍然会从上次删除的位置开始新增。例如原来的表当中删除了id为7,6...1的数据,下次再新增的时候,会从8开始。 

        即使使用delete from +table +表的名称之后,下次新增依然是从最大的自增id那里开始。


五、DDL&DQL&DML&DCL的区别

DDL(database、table)

DDL语句是对于操作数据库(databsee)进行查看、创建、删除、使用操作。

或者对于数据库的表的结构进行一系列的操作(alter table,create table等等)。


DQL(数据查询语言)

例如:select ... from ... where...这样的语句。对于数据库当中表的数据的查询操作。


DML

对于数据库当中的数据进行增删改操作。

例如:insertdeleteupdate操作等等。


DCL(权限)

       这一个层次的语句,都是和数据库的权限有关系的。并控制数据库操纵事务发生的时间及效果,对数据库实行监视等


六、left join,right join,inner join,笛卡尔积的区别

INNER JOIN(或 JOIN):


INNER JOIN 返回两个表中都有匹配的行。
如果某个表中的行在另一个表中没有匹配的行,那么该行就不会出现在结果集中。
这是最常见的连接类型,因为它只返回两个表之间真正相关的数据。
示例:假设有两个表,一个是员工表(employees),另一个是部门表(departments)。如果你想要找到每个部门及其员工的列表,并且只关心那些有员工的部门,你会使用 INNER JOIN。


LEFT JOIN(或 LEFT OUTER JOIN):


LEFT JOIN 返回左表中的所有行,以及右表中匹配的行。如果左表中的某行在右表中没有匹配的行,则结果集中右表的部分将包含 NULL 值。
这种连接类型通常用于当你想要从左表中选择所有行,并且只关心与右表相关的那些行时。
示例:再次使用上面的员工和部门表。如果你想要找到每个员工及其所在的部门,但也要包括那些没有员工的部门(可能表示部门是空的或正在招聘中),你会使用 LEFT JOIN。


RIGHT JOIN(或 RIGHT OUTER JOIN):


RIGHT JOIN 与 LEFT JOIN 相反。它返回右表中的所有行,以及左表中匹配的行。如果右表中的某行在左表中没有匹配的行,则结果集中左表的部分将包含 NULL 值。
在实际使用中,RIGHT JOIN 不如 LEFT JOIN 常见,因为你可以通过简单地交换两个表的顺序并将 LEFT JOIN 转换为 RIGHT JOIN 来达到相同的效果。
示例:虽然不常见,但如果你想要找到每个部门及其员工,但也要包括那些没有员工的部门,并且你更习惯于从右表(部门表)开始查询,你可以使用 RIGHT JOIN。但请注意,这只是一个习惯问题,使用 LEFT JOIN 和交换表顺序可以达到相同的效果。
总结:选择哪种连接类型取决于你的具体需求和你想要从查询中获得的结果。在大多数情况下,INNER JOIN 和 LEFT JOIN 是最常用的连接类型。

两个表的笛卡尔积(Cartesian Product)**

*是指将第一个表中的每一行与第二个表中的每一行进行组合,从而生成一个新的结果表。新表中的行数将是两个原始表行数的乘积。如果表A有a行,表B有b行,那么它们的笛卡尔积将包含a*b行。

在SQL中,如果你简单地列出两个表并在SELECT语句中使用逗号分隔,并且没有指定任何连接条件(如WHERE子句中的连接条件),那么大多数数据库系统都会返回这两个表的笛卡尔积。

革凡成圣–wjx
关注 关注
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL~数据库聚合查询(聚合函数、group by)与联合查询(内连接外连接)实现多表查询
2401_84003977的博客
04-19 846
无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取![外链图片转存中…(img-xZxTw9Xv-1713504514502)]
MySQL分组查询、连表查询子查询,分页查询
JiangHu_Java的博客
06-17 347
MySQL分组查询、连表查询子查询,分页查询前言分组查询案例连表查询概念:分类连接sql92标准连接查询案例非等值连接连接join链接sql99语法 join案例自连接外连接常见函数常见函数案例子查询总结 前言 之前讲过了MySQL的一些基本知识点,今天讲一点复杂的SQL语句! MySQL相关知识点: MySQL安装卸载以及使用 MySQL之账号管理,四大引擎以及DDL(数据定义语言) MySQL常见查询、表达式、排序、分组查询基础 分组查询案例 语法: select 查询列表 from 表 【wher
MySQL聚合查询 + 多表联合查询(重点)
yzhcjl_的博客
05-26 3497
期末复习必看, 小白必看, 介绍常用聚合函数, 多表联合查询中的内连接, 外连接, 自链接
MySQL基础(三)-数据查询连接查询(内连接外连接)、多表联查
five小点心的博客
12-07 2334
在实际开发中,大部门的情况下都不是从单表中查询数据,一般都是多张表联合查询,取出最终的结果。在实际开发中,一般一个业务会对应多张表。如:学生和班级。如果将学生和班级信息存储到一张表中数据会存在大量的重复,导致数据的冗余。内连接:假设A和B表进行连接,使用内连接的话,凡是A表和B表能够匹配上的记录查询出来,这就是内连接。AB两张表没有主副之分,两张表是平等的。外连接:假设A和B表进行连接,使用外连接的话,AB两张表中有一张表是主表,一张表是副表。主要查询主表中的数据,捎带查询副表。
MySQL笔记——表的分组查询、表的分页查询、表的约束、数据库设计
张小鱼的博客
07-28 1706
本文主要介绍表的分组查询、表的分页查询、表的约束,以及相关的案例展示。
MySQL基础(分组查询,排序查询,多表查询,连接查询,子查询,分页查询,联合查询)
fj123321666的博客
02-18 456
本文主要写了一些MySQL的基础操作,介绍了MySQL的概念,写了MySQL的增删改查等操作,主要是记录自己学习MySQL的笔记,方便日后回顾复习
MySQL数据库增删改查进阶 — 聚合查询分组查询联合查询
超烦豆先森
11-23 680
MySQL 数据库 - 联合查询分组查询聚合查询
MySQL 子查询分组查询
01-21
子查询SQL查询中的重要一块,是我们基于多表之间进行数据聚合和判断的一种手段,使得我们的处理复杂数据更加的便捷,这一节我们主要来了解一下子查询。 先做一下数据准备,这边建立三张表:班级、学生、毕业成绩表...
MySql基本查询连接查询子查询、正则表达查询讲解
08-24
5、子查询 6、合并查询结果 7、为表和字段取别名 8、使用正则表达式查询 什么是查询? 怎么查的? 数据的准备如下: [sql] view plain copy create table STUDENT( STU_ID int primary KEY, STU_NAME char(10) ...
详解MySql基本查询连接查询子查询、正则表达查询
12-16
查询数据指从数据库中获取...5、子查询 6、合并查询结果 7、为表和字段取别名 8、使用正则表达式查询 什么是查询? 怎么查的? 数据的准备如下: create table STUDENT( STU_ID int primary KEY, STU_NAME char(10
数据库系统及原理及MYSQL应用教程多表连接子查询实验报告
04-15
实验目的: 1. 掌握GROUP BY语句和聚合函数的使用。 2. 掌握多表连接查询子查询的基本概念。 3. 掌握多表连接的各种... 分组查询、多表连接查询子查询,具体内容参见实验指导手册。 二、实验器材 计算机、MySQL8.0
数据分析系列 16/32 | MySQL子查询联合查询
01-19
前面说了很多MySQL中的查询,比如条件查询、分组聚合查询连接查询,今天来说一下另外两个非常的重要的查询MySQL中的子查询联合查询。 PART01  子查询 子查询也称嵌套查询,是将一个查询语句嵌套在另一个查询...
MySQL学习笔记5-分组查询连接查询
alien_y的博客
09-22 364
mysql学习笔记
MySQL简单查询/多表查询/子查询/分组查询详细讲解
ljabcdefg111的博客
07-19 1535
一、简单查询 SELECT 查询的字段 如果有多个字段需要用逗号隔开 FROM 表 如果有多个表,需要用逗号隔 WHERE 条件 如果有多个条件,需要用and/or进行连接 Not,in,between and,like,is null... ... Where后面不允许使用分组函数 二、分组查询............
mysql union all多表order by和group by一起使用(先排序后分组)
weixin_42169734的博客
02-17 3891
分组之前 SELECT * FROM ( SELECT user_id, CREATE_TIME, shop_id FROM large_fore_credit_apply_record WHERE shop_id = '2000043' UNION ALL SELECT user_id, CREATE_TIME, shop_id FROM large_apply_credit_record WHERE shop_id = '2000043' UNION ALL SELECT user
MySQL基础学习笔记五、数据分组与子查询
qq_43681634的博客
05-01 917
MySQL基础学习笔记五、数据分组与子查询
Mysql分组查询
热门推荐
不怕猫的耗子A
11-15 4万+
分组查询 1、分组查询是对数据按照某个或多个字段进行分组,在MYSQL中使用GROUP BY关键字对数据进行分组 2、GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组。字段中值相等的为一组 ⑴分组的核心是:在查询SQL中指定分组的列名,然后根据该列的值进行分组,值相等的为一组 3、分组查询的基本的语法格式如下: GROUP BY 字段名 [HAVING 条件表达式] 参数: 1、字段名:是指按照该字段的值进行分组(分组是所依据的列名称) 2、HAVING条件表达式:用来...
mysql分组子查询_Mysql-4 分组查询子查询
weixin_35748962的博客
01-25 306
1、查询结果的分组操作a、分组允许把数据分为多个组,以便能对每个组进行聚集计算b、分组是在select语句的group by 子句中建立的注意:group by 只是创建分组,但并不保证分组里面的数据的排列顺序,需要使用order by 子句对分组里面的数据进行排序目的:使用group by 语句对select 查询的结果进行分组,以便统计实例数据库:crachsource 表:products ...
MySQL~聚合查询联合查询(多表查询、复合查询)
qq_58284486的博客
04-19 3901
目录 聚合查询 聚合函数 GROUP BY子句 HAVING 联合查询连接 外连接连接 子查询 单行子查询 多行子查询 合并查询 聚合查询 聚合函数 首先创建一个学生表,用来演示聚合函数的作用 -- 创建学生表 drop table if exists student; create table student( id int primary key auto_increment, sname varchar(20) not null...
mysql 分组子查询
最新发布
10-30
MySQL中的分组子查询是指在GROUP BY子句中使用子查询来进行分组操作。它可以在一个查询中同时使用GROUP BY和子查询,以便根据子查询的结果对查询结果进行分组。这种方法可以帮助我们更好地组织和分析数据。在使用分组子查询时,我们需要注意以下几点: 1. 子查询必须返回一个单一的值,否则会出现错误。 2. 子查询必须放在括号中,并且必须在GROUP BY子句之前执行。 3. 子查询中可以使用聚合函数,如SUM、AVG、COUNT等。 4. 子查询中可以使用WHERE子句来过滤数据。 举个例子,假设我们有一个订单表,其中包含订单号、客户ID和订单金额等信息。我们想要按照客户ID分组,并计算每个客户的订单总金额。可以使用以下SQL语句来实现: SELECT customer_id, SUM(order_amount) FROM orders WHERE customer_id IN (SELECT customer_id FROM customers WHERE country='USA') GROUP BY customer_id; 这个查询中,子查询返回了所有来自美国的客户ID,然后在主查询中使用了这些ID来计算每个客户的订单总金额。最终的结果将按照客户ID进行分组。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 【MySQL锁篇】MySQL死锁问题以及解决方案 13028
  • ReentrantLock详解 8329
  • Java当中的定时器 4378
  • 【软件测试篇5】如何设计测试用例 3991
  • 【MySQL锁篇】MySQL是怎样加锁的 3900

最新评论

  • 【网络原理8】HTTP请求篇

    革凡成圣–wjx: 比特就业课表情包

  • 【网络原理8】HTTP请求篇

    阿杰114: 哪个老师讲的,我也去听听

  • 【项目篇1】一个在线OJ系统

    革凡成圣–wjx: 应该对方也是我培训班的同学,我看博客风格啥的都跟我们有点像,不存在抄袭哈。

  • 【项目篇1】一个在线OJ系统

    革凡成圣–wjx: 我这篇去年发表的哦

  • 【项目篇1】一个在线OJ系统

    革凡成圣–wjx: 看看时间再说

大家在看

  • 【会议征稿,中国算力大会分会】2024算法、高性能计算与人工智能国际学术会议(AHPCAI 2024,8月14-16)
  • 计算机科学:统一计算架构,超越冯诺依曼架构的创新之路
  • 计算机科学:英特尔推出UCA解决方案“Xe”:现代计算的未来 154
  • 【会议征稿,ACM出版】2024年无人驾驶与智能传感技术国际学术会议(ADIST 2024,6月28-30)

最新文章

  • 【48天笔试强训】day23
  • 【48天笔试强训】day21
  • 【48天笔试强训】day20
2024年25篇
2023年63篇
2022年29篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司大芬推广网站平湖网站推广方案报价滨州seo优化报价朝阳SEO按天计费公司广东网站排名优化哪家好布吉百度网站优化推荐霍邱网站关键词优化公司扬州百度竞价多少钱宁波网站建设多少钱北海网站建设设计多少钱诸城推广网站推荐营口网站优化排名推荐承德营销型网站建设公司延安推广网站哪家好茂名百姓网标王推广哪家好长葛SEO按天扣费价格滨州网站排名优化多少钱福田SEO按效果付费多少钱丽江百度网站优化排名报价海口SEO按天扣费哪家好阿坝建站推荐济宁营销网站推荐阜阳网站建设宝鸡百度竞价包年推广公司宣城网站推广方案赤峰关键词按天扣费西安seo网站推广推荐丽江seo优化价格潮州SEO按天收费公司梧州SEO按天扣费推荐歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化