跳到主要内容

函数、分组、连接查询

基本函数说明

函数说明
COUNT计算某一列的总数
SUM计算某一列的合计值,该列必须为数值类型
AVG计算某一列的平均值,该列必须为数值类型
MAX计算某一列的最大值
MIN计算某一列的最小值
FLOOR向下取整数
CEILNG向上取整数

案例

-- 函数查询,函数后面可以自定义列名
-- 同时可添加WHERE筛选
SELECT COUNT(*) "男生总数"
FROM students
WHERE gender = "M"

-- 添加更加复杂的函数组合
SELECT COUNT(*) "男生总数" , AVG(score) "男生平均分"
FROM students
WHERE gender = "M"

分组查询

在表达式最后添加GROUP BY [列名]即可返回分组数据,需要注意分组条件的合理性

-- 关键:列与分组两者需相互平衡
SELECT class_id "班级", COUNT(*) "男生总数" , AVG(score) "男生平均分"
FROM students
WHERE gender = "M"
GROUP BY class_id

-- 计算班级男女生的总数
SELECT class_id "班级" , gender "性别", COUNT(*) "人数"
FROM students
GROUP BY class_id , gender

-- 计算班级平均分
SELECT class_id , AVG(score)
FROM students
GROUP BY class_id

多表查询

  • 一次查询两个表,即查询结果为两表的“乘积”
  • 使用时添加列别名避免重复列
  • 添加外键将重复数据去除
  • 由于运算量巨大,普遍的需求可通过「连接查询」完成
-- 正常查询
SELECT
students.id,
students.name "姓名",
students.score "分数",
classes.`name` "班级"
FROM students,classes

-- 使用别名列
SELECT
c.name "班级",
s.name "姓名",
s.score "分数"
FROM students s,classes c
WHERE s.class_id = c.id
ORDER BY c.name , s.score DESC;

连接查询

  • 有两种方式:insert、outer。对应内连、外连

案例

-- 内连接查询 INSERT JOIN
-- 默认为 INSERT 可略写
SELECT *
FROM students s
JOIN classes c
ON s.class_id = c.id

-- 关键点:可以理解为布尔运算
INSERT : 表的数据的交集
OUTER : LEFT 选择左边的数据为据点,右侧反之

-- SELECT *
FROM students s
RIGHT OUTER JOIN classes c
ON s.class_id = c.id

关键点

  • 可以理解为布尔运算
  • INSERT : 数据的交集
  • OUTER : LEFT 选择左边的数据为据点,右侧反之