mysql系列教程(五)—–mysql数据处理之分组函数

MySQL

上篇文章介绍了过滤查询和排序查询数据。这篇文章介绍一下分组函数。

分组函数

分组函数作用于一组数据,并对一组数据返回一个值。

组函数语法

SELECT      [column,] group function(column), ...
FROM        table
[WHERE      condition]
[GROUP  BY  column]
[ORDER  BY  column];

组函数类型

  • AVG()
  • COUNT()
  • MAX()
  • MIN()
  • SUM()

AVG(平均值)和SUM(合计)函数

  • 可以对数值型数据使用AVG和SUM函数
SELECT AVG(salary),MAX(salary),MIN(salary),SUM(salary)
FROM user;
#查询所有员工的平均薪水、最高薪水最低薪水以及薪水总和

MIN(最小值)和MAX(最大值)函数

  • 可以对任意数据类型的数据使用

COUNT(计数)函数

  • COUNT(*)返回表中记录总数,适用于任意数据类型
  • COUNT(expr) 返回expr不为空的记录总数

分组数据

GROUP BY 子句语法

SELECT      [column,] group function(column), ...
FROM        table
[WHERE      condition]
[GROUP  BY  column]  #分组语法
[ORDER  BY  column];
  • 在SELECT列表中所有未包含在组函数中的列都应该包含在GROUP BY子句中。
SELECT department_id, AVG(salary)
FROM   user
GROUP BY department_id;

包含在GROUP BY 子句中的列不必包含在SELECT列表中

SELECT AVG(salary)
FROM   user
GROUP BY department_id;

使用多个列进行分组

SELECT department_id, job_id, AVG(salary)
FROM   user
GROUP BY department_id, job_id;

非法使用组函数

  • 不能在where子句中使用组函数
  • 可以在having子句中使用组函数

过滤分组:HAVING子句

  1. 行已经被分组
  2. 使用了组函数
  3. 满足HAVING子句中条件的分组将被现实
SELECT      [column,] group function(column), ...
FROM        table
[WHERE      condition]
[GROUP  BY  column]
[HAVING     group_condition]
[ORDER  BY  column];
SELECT department_id, MAX(salary)
FROM   user
GROUP BY department_id
HAVING MAX(salary)>10000;
#查询部门最高工资高于10000的部门的最高工资

多表查询

语法:

SELECT table1.column,table2.column 
FROM table1,table2
WHERE table1.column1 = table2.column2;
#在WHERE子句中写连接条件
#在表中有相同列是,在列名之前加上表名前缀

笛卡尔集

  • 笛卡尔集会在下面条件下产生
    • 省略连接条件
    • 连接条件无效
    • 所有表中的所有行互相连接
  • 为了避免笛卡尔集,可以在WHERE加入有效的连接条件

区分重复的列名

  • 使用表名前缀在多个表中区分相同的列
  • 在不同表中具有相同列名的列可以用表的别名加以区分
  • 如果使用了表别名,则在SELECT语句中需要使用表别名代替别名
  • 表别名最多支持32个字符长度,但建议越少越好

表的别名

  • 使用别名可以简化查询
  • 使用别名前缀可以提高执行效率
SELECT g.id, name, boy_name
FROM girls g,boys b
WHERE g.`boyfriend_id`=b.id;

使用ON子句创建连接

  • 自然连接中是以具有相同名字的列为连接条件的
  • 可以使用ON子句指定额外的连接条件
  • 这个连接条件是与其他条件分开的
  • ON子句使语句具有更高的易读性

Join连接

  • 内连接 [inner] join on
  • 外连接
    • 左外连接 left [outer] join on
    • 右外连接right [outer] join on
SELECT g.id, name, boy_name
FROM girls g
Inner join boys b
On g.`boyfriend_id`=b.id;

欢迎小伙伴补充纠正。

mysql系列教程(五)—–mysql数据处理之分组函数》有1条评论

评论已关闭。