MySql数据库_05

数据库基础_笔记05

2019年12月17日 星期二 CQCET

复杂数据查询

- 聚合函数

聚合函数包括
SUM(),COUNT(),AVG(),MAX(),MIN()

聚合函数语法:

select 聚合函数(列名) from 表名 [where 条件];
  • sum函数
    用于计算合
select sum(成绩) 某某班总成绩 from xs_kc;

在这里插入图片描述

  • count函数
    count函数用于统计记录条数
select count(学号) 参考人数 from xs_kc;

在这里插入图片描述

加上where条件查询

select count(学号) 班级男生人数 from xsqk where 性别='男';

在这里插入图片描述

  • AVG函数
    avg函数用于统计平均值
select avg(成绩) from xs_kc where 学号=2016110101;

在这里插入图片描述

  • MAX函数

max函数用于查询最大值

select max(成绩) from xs_kc;

在这里插入图片描述

  • MIN函数

min函数用于打印最小值

select min(成绩) 最低成绩 from xs_kc;

在这里插入图片描述

- 分类汇总

一个聚合函数只能汇总一条记录,分类汇总用于查询多条记录汇总查询。

简单分类查询语法:

select 列名 from 表名 where 条件 group by 列名1[...];

简单的分类查询:

select * from xs_kc group by 课程号;

在这里插入图片描述

ps:因为group by 在进行分类时会筛选重复数据。

  • 统计功能分类查询
select 课程号, group_concat(学号) 学号 
from xs_kc 
group by 课程号;

其中group_concat()函数可以显示每条分组中指定的字段值。
在这里插入图片描述

  • 多字段分类查询

语法:

select 列名 from 表名 where 条件 group by 列名1...

在这里插入图片描述

select 学号,专业名,group_concat(姓名) 姓名,count(姓名) 人数 from xsqk group by 姓名,专业名;

concat()函数记录条数
在这里插入图片描述

  • HAVING子句分类查询
select 课程号, avg(成绩) 平均成绩, group_concat(学号) 学号, count(学号) 人数 from xs_kc group by 课程号 having avg(成绩) >60;

在这里插入图片描述

简单理解having就是where,但是where后不能用聚合函所以采用having。

  • 多表查询

在sql注入中会用到内联注入。
内连查询
内连就是将多个共享列值进行比较,把多个表中的满足条件的的连接记录横向连接。内连接分
自连接
等值连接
非等值连接

自连接:
其中 from xsqk x,xsqk z 采用表的别名,就是把xsqk取别名为x,和z,连个表连接的语句是 where x .学号 z.学号
因为是自连接,所以都是xsqk表本身,如果要从另外的表连接,需要一个为主表,一个为从表。

在这里插入图片描述

  • 等值连接

等职连接就是在where后添加=来使两个表中相同字段的值作为连接。

在这里插入图片描述

  • 外连查询

通过内连的结果是相关表中的
外连查询会返回操作表中至少一个表的所有记录
外连分
左外连接和右外连接(我觉得都一样)

select xsqk.学号,姓名,课程号,成绩 from xsqk left outer join xs_kc on xsqk.学号=xs_kc.学号;

左外连接

在这里插入图片描述

右外连接

select xsqk.学号,姓名,课程号,成绩 from xsqk right outer join xs_kc on xsqk.学号=xs_kc.学号 ;

在这里插入图片描述

原文地址:https://www.cnblogs.com/cqnswp/p/12568877.html