数据库系统原理
  • 数据库系统原理
  • 引言
    • 数据库系统概述
  • 关系模型介绍
    • 关系数据库结构
    • 数据库模式
    • 关系代数
      • 选择运算
      • 投影运算
      • 笛卡尔运算
      • 连接运算
      • 集合运算
      • 其他运算
  • SQL介绍
    • SQL语言分类
    • SQL数据类型
    • SQL数据库操作
    • SQL数据表操作
    • SQL数据操纵语言
    • SQL数据查询语言
    • 集合运算
    • 聚集函数
  • 中级SQL
    • 连接查询
    • 内连接
    • 外连接
    • 交叉连接和自连接
    • 视图
    • 完整性约束
    • SQL用户和授权
  • 高级SQL
    • 函数
    • 存储过程
    • 触发器
  • ER模式数据库设计
    • 数据库设计过程概览
    • 需求分析
    • 实体-联系模型
      • 复杂属性
      • 映射基数和弱实体集
    • 将E-R图转换为关系模式
    • E-R模型设计
  • 关系数据库设计
    • 数据库设计规范化
    • 函数依赖理论
    • 关系范式
  • 半结构化数据
    • 半结构化数据
  • 应用程序开发
    • ADO.NET访问数据库技术
    • 断开模式数据查询
    • 连接模式数据更新
  • 数据存储结构
    • 磁盘
    • 文件的存储
    • 文件的逻辑结构
    • 文件组织
  • 索引
    • 索引基本概念
    • B树索引
    • B+树索引
    • MySQL索引的基本语法
    • 联合索引
  • 查询处理
    • 查询处理概述
  • 查询优化
    • 查询优化概述
    • 查询树的启发式优化(代数优化算法)
  • 事务
    • 事务的概念
    • 事务的特性
    • MySQL事务处理
    • 可串行化
  • 并发控制
    • 并发控制概述
    • 封锁
    • 两阶段封锁协议封锁
    • 多粒度封锁
    • 活锁和死锁
    • 基于时间戳排序的并发控制
    • 乐观控制法
  • 恢复系统
    • 数据库恢复概述
    • 数据库恢复的实现技术
    • 基于检查点的数据库恢复
Powered by GitBook
On this page
  • 分组与筛选表达式
  • 带group_concat() 的分组
  • 带with rollup 的分组
  • having
  • 嵌套子查询
  1. SQL介绍

聚集函数

聚集函数有五种类型:

  1. COUNT 函数

    COUNT([DISTINCT| ALL]*) 关系中元组个数统计
    COUNT([DISTINCT| ALL]<列名>) 关系中给定列中属性值个数统计
  2. sum 函数

    SUM([DISTINCT| ALL]<列名>) 关系中计算数值型属性值总和 。
  3. AVG 函数

    AVG([DISTINCT| ALL]<列名>) 关系中计算数值型属性值平均值。
  4. MAX 函数

    MAX([DISTINCT| ALL]<列名>) 关系中计算给定列中数值型属性值的最大者 。
  5. MIN 函数

    MIN([DISTINCT| ALL]<列名>)关系中计算给定列中数值型属性值的最大小者。

示例:使用COUNT(*)函数来统计数据库中学生信息表中的行数。

SELECT COUNT(*) FROM Student_Info;

示例:统计学生信息表的“兴趣爱好”的数量:

SELECT COUNT(Hobby) FROM Student_Info;

上面两个代码得到的行数不同,因为不是每个学生都有兴趣爱好,NULL 不会被统计。

分组与筛选表达式

SQL语句中使用group by 子句和having 子句对映像语句所得到的集合元组分组和设置逻辑条件进行筛选。

<SELECT查询块>
GROUP BY<列名>
HAVING<列名>;
  • 所有在GROUP BY 子句中指定的表达式里,具有相同结合值的记录行将按一组处理,在结果集里以一行结束。

  • 聚集函数可以与group by 一起使用将记录分组。

  • 当带有group by 子句时,聚集函数将为每个组统计值。

统计学生成绩表中,每个学生的平均成绩:

SELECT SNo, AVG(Score)
FROM Score_Info
GROUP BY SNo;

带group_concat() 的分组

group_concat() 函数将每组的结果以字符串形式连接起来。

示例:将每个学生的成绩统计并且排列展示:

SELECT SNo, GROUP_CONCAT(Score) AS Scores
FROM Score_Info
GROUP BY SNo

带with rollup 的分组

可在group by 子句里使用with rollup 修饰符进行汇总,以产生多个级别的统计值。

示例:查询统计每个学生的总成绩并显示汇总信息

SELECT SNo, SUM(Score) as TotalScore
FROM Score_Info
GROUP BY SNo
WITH ROLLUP;

having

having 子句被用于消除基于聚集值的记录行。

示例:查询统计每个学生的总成绩,并保留总成绩大于520的结果:

SELECT SNo, SUM(Score) as TotalScore
FROM Score_Info
GROUP BY SNo
Having SUM(Score) > 520 ;

嵌套子查询

嵌套子查询是将一个查询结果作为另一个查询结果的条件的一种查询语法。

SELECT *
FROM Table1
	where ColumnName in 
		(select ColumnName from Table2 where ... )

因为本质上一个查询结果就是一个临时的表。

Previous集合运算Next连接查询

Last updated 4 months ago