MySQL --- 聚合查询 和 联合查询

这篇具有很好参考价值的文章主要介绍了MySQL --- 聚合查询 和 联合查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

聚合查询:

下文中的所有聚合查询的示例操作都是基于此表:

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

聚合函数

聚合函数都是行与行之间的运算。

count()

select count(列名) from 表名;

统计该表中该列的行数,但是 null 值不会统计在内,但是如果写为 count(*) 那么 null 也会算进去(就算一整行都是 null 也会算进去

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

例如我们暂时使用这个表进行演示:

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

此表有一行全为空

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sqlMySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

sum()

select sum(列名) from 表名;

只能针对数字类型使用,也可以对多列进行相加求一个总和;

对该表中的math列的值进行求和。

注:会将 null 值排除在外,不予计算。

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

avg()

select avg(列名) from 表名;

对该表中的该列进行求平均值。

只能针对数字类型使用

注:会将 null 值排除在外,不予计算。

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

max()

select max(列名) from 表名;

求出该表中该列的最大值。

只能针对数字类型使用

注:会将 null 值排除在外,不予计算。

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

min()

select min(列名) from 表名;

求出该表中该列的最小值。

只能针对数字类型使用

注:会将 null 值排除在外,不予计算。

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

group by

group by 可以实现对数据进行分组

一般的使用方法都是先用  group by 进行分组,然后再利用聚合函数进行聚合查询。

select * from 表名 group by 列名;

group by 会将该列中值相同的分为一组。因为没有使用order by 进行排序操作所以MySQL并不会对查询结果的顺序做出保证。

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

此时我们在原有表的基础上再加一行数据。

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

加入该条数据后该表变成了:

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

此时再进行分组查询操作:

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

此时因为没有使用聚合函数所以 张三这一行 只是在张三这一组中选了一个代表

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

如果加入聚合函数就可以很清楚的看到,聚合函数会以每组为单位进行操作

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

此时如果我们不想让某行(某几行)参与分组就可以在 group by 之前加入 where 进行条件筛选。

select * from 表名 where 条件 group by 列名;

例:此时我们不想让 null 这个空值和 math=100 的行参与分组 

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

注意:where 条件 必须在 group by 之前

在后面就会报错。

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

having

having 其实和 where 差不多都是进行条件筛选的语句。

group by 子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用 where 语句,而需要用 having

having是对分组之后的数据进行筛选的。

例:此时我们不想让 null 这个空值和 成绩=100 的行参与分组 

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

此时的语句执行顺序为:

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

所以 having 子句中的条件一定要和 select 中的对应

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

注:having 必须写在 group by 子句之后。

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql


联合查询:

实际开发中往往数据来自不同的表,所以需要多表联合查询。

多表查询的关键是对多张表的数据取笛卡尔积:

下面我先简单介绍一下笛卡尔积,假设我们现在有如下的两张表。而对他们的数据取笛卡尔积就是用第一个表的每行数据分别与第二张表的每行数据进行组合。 

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

这两张表进行笛卡尔积之后就变成了一个 9 行 4 列的新表,如图所示

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

这就是对两个表进行去取笛卡尔积的结果。

但是,我们很容易就可以发现这里面有非常多的所谓的非法数据,

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

从图中我们可以看到只有三条数据是合法的,而我们再进行数据库操作的时候肯定不能允许有这么多的非法数据出现在查询结果中,此时我们就可以通过寻找两张表的关联属性来通过 where 条件来进行筛选,比如上面的表就可以通过设置两张表的班级相同来进行筛选。

内连接

内连接其实就是在多张表中求交集(或者说就是最终查询的结果中的每条数据的链接条件都存在于原本的多张表中)。

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

此处为了更好的演示,我先创建了三张表

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

内连接的语句就这两条: 

select 字段 from 表1  [inner] join 表2  on 连接条件 and 其他条件;

select 字段 from 表1 ,表2  where 连接条件 and 其他条件;

上面这些格式看着很复杂其实完全没有必要记这些。只要按照下面这些步骤一步一步的多练习几次就能掌握。

内连接本质上分为以下几步:

例:查询凌华的各科成绩。

第一步:先求出笛卡尔积

select * from 表一,表二,……

通过上述语句就可以求出多张表的笛卡尔积。

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

此时一共输出了27条数据。

第二步:加上连接条件,筛选出合法信息

此处推荐再写where中的条件时,使用 表名 点 列名 的写法因为表中可能会有相同的列名。

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

第三步:结合需求进一步增加条件,对结果进行筛选;

此处需要增加的条件就是名字是凌华。

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

第四步:对列进行精简,筛选出需要展示的列

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

此时你再对照开头的表达式就会发现一摸一样,基本上所有的内连接都可以套用这四大步。

select 字段 from 表1  [inner] join 表2  on 连接条件 and 其他条件;

select 字段 from 表1 ,表2  where 连接条件 and 其他条件;

注:第一条语句中的 [inner] join 中的 inner 之所以用 [] 括起来是因为可以省略不写。

外连接

如果多张表中的信息都存在对应关系那么内连接和外连接的结果就都是一样的,如果表中的数据不对应内外连接就会出现差别。

外连接分为左外连接和右外连接。

例:有如下两张数据没有完全对应的表

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sqlMySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

左外连接

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

select 字段 from 表1  left join 表2 on 连接条件 and 其他条件;

这个表达式除了 left 之外和内连接都是相同的。

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

左外连接就是以左表为基础,如果左表有右表没有那么就用 null 代替。

右外连接

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

select 字段 from 表1  right join 表2 on 连接条件 and 其他条件;

这个表达式除了 right 之外和左外连接都是相同的。

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

右外连接就是以右表为基础,如果右表有左表没有那么就用 null 代替。

自连接

自连接就是自己和自己取笛卡尔积,和内连接的解题方法相同。

注:在自连接中必须要给表取别名否则会报错。

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

自连接的优点:可以将行与行之间的关系转换成列与列。

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sqlMySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

例:在上述表中查询出 C++ 成绩大于单片机成绩的人。

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

子查询

子查询本质上就是‘套娃’,就是将多个简单的sql语句嵌套成一个复杂的sql语句。

 MySQL --- 聚合查询 和 联合查询,mysql,数据库,sqlMySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

例:查找出名为可莉的学生在几年级。

1.先找出可莉的班级号

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

2.根据班级号在班级表中找到班级名

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

而子查询就是将这两句sql语句嵌套起来

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

合并查询

合并查询是通过 union 来实现的

在MySQl中可以通过 union 来将多个表的查询结果合并成一张表。

注:合并的两个结果的对应列之间列数和数据类型必须相同(列名系统会自动按照第一个表的列名),union 会去掉结果中的重复项。

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sqlMySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

例如查询这两张表中的 id 和 name 结果返回一张表;

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

在这张结果中只有一个 id = 1 的学生。

如果你不想对结果进行去重处理,就可以使用 union all 

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

如果对同一张表使用 union 那么它的结果会和使用 or 相同

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql

MySQL --- 聚合查询 和 联合查询,mysql,数据库,sql文章来源地址https://www.toymoban.com/news/detail-716405.html

到了这里,关于MySQL --- 聚合查询 和 联合查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MySQL探索之旅】数据库设计以及聚合查询

    📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有限,欢迎各位大佬指点,相互学习进步! 数据库

    2024年04月09日
    浏览(38)
  • 【从删库到跑路】MySQL数据库的查询(单表查询,多表查询,内外连接,联合查询,子查询)

    🎊专栏【MySQL】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 在项目开发中,在进行数据库表结构设计时,会根据业务需求以及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联

    2024年02月10日
    浏览(36)
  • 【JaveWeb教程】(20) MySQL数据库开发之 基本查询、条件查询、聚合函数、分组查询、排序查询、分页查询 详细代码示例讲解

    在上次学习的内容中,我们讲解了: 使用DDL语句来操作数据库以及表结构(数据库设计) 使用DML语句来完成数据库中数据的增、删、改操作(数据库操作) 我们今天还是继续学习数据库操作方面的内容:查询(DQL语句)。 查询操作我们分为两部分学习: DQL语句-单表操作

    2024年02月02日
    浏览(67)
  • Mysql 数据库DQL 数据查询语言 SELECT 基本查询、条件查询、聚合查询、分组查询、排序查询、分页查询——包含DQL所有查询语句。吐血分享。

    DQL:数据查询语言; 用来对表内的数据进行查找 。Database Query Language SQL语句分为:基本查询、条件查询、聚合查询、分组查询、排序查询、分页查询。  可以发现name字段就只剩下一个张三了;   条件: 条件查询—比较运算符 比较运算符 功能 大于 = 大于等于 小于 = 小于等

    2024年01月19日
    浏览(45)
  • 【MySQL】MySQL PHP 语法,PHP MySQL 简介,查询,下载 MySQL 数据库, SQL 教程

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 MySQL 可应用于多种语言,包括 PERL, C, C++, JAVA 和 PHP,在这些语言中,MySQL 在 PHP 的 web 开发中是应用最广泛。 我们

    2024年02月11日
    浏览(42)
  • 玩转MySQL数据库之SQL优化之慢查询

    本系列为:MySQL数据库详解,为千锋资深教学老师独家创作,致力于为大家讲解清晰MySQL数据库相关知识点,含有丰富的代码案例及讲解。如果感觉对大家有帮助的话,可以【关注】持续追更~ 文末有本文重点总结,技术类问题,也欢迎大家和我们沟通交流! 从今天开始本系列

    2024年02月06日
    浏览(69)
  • MySQl数据库第八课-------SQL命令查询-------主要命脉

     欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com —————————————————————————————— 查询数据         条件         逻辑运算符         模糊查询         范围查询 in         判断空 UNION  排序 聚合 分组:gro

    2024年02月16日
    浏览(43)
  • Python MySQL 数据库查询:选择数据、使用筛选条件、防止 SQL 注入

    要从MySQL中的表格中选择数据,请使用\\\"SELECT\\\"语句: 示例选择\\\"customers\\\"表格中的所有记录,并显示结果: 注意 :我们使用 fetchall() 方法,该方法从上次执行的语句中获取所有行。 要仅选择表格中的某些列,请使用\\\"SELECT\\\"语句,后跟列名: 示例仅选择name和address列: 如果您只对

    2024年02月05日
    浏览(71)
  • 数据库 SQL高级查询语句:聚合查询,多表查询,连接查询

    创建Students和Courses表 直接查询 设置别名查询 设置条件查询 使用COUNT(*) 和 COUNT(StudentID)是一样的效果,因为StudentID是主键,每行记录的主键都不同。另外我们在聚合查询中还是能使用WHERE子句的,比如我们要 查找年龄大于20岁的学生数量 ,可使用以下SQL语句: 函数 说明 SUM

    2024年02月09日
    浏览(99)
  • MySQL数据库干货_16—— SQL99标准中的查询

    SQL99标准中的查询 MySQL5.7 支持部分的SQL99 标准。 SQL99中的交叉连接(CROSS JOIN) 示例: 使用交叉连接查询 employees 表与 departments 表。 SQL99中的自然连接(NATURAL JOIN) 自然连接 连接只能发生在两个表中有相同名字和数据类型的列上。如果列有相同的名字,但数据类型不同,NATURAL J

    2024年02月06日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包