SQL理论课-Class 3

2023-02-27 13:59:24 浏览数 (4)

Class_2复习

代码语言:javascript复制
select b.ENAME
from EMP a,EMP b
where a.mgr=b.empno

select empno from emp where deptno = 20
intersect
select empno from emp where deptno = 20

Class_3

聚集函数 Aggregate Functions

avg min max sum count

输入一个集合,输出一个值。

代码语言:javascript复制
avg,sum #只能用于数值
min,max,count #可以用于除数值之外。
count #是用来计数的,非NULL记录 1,反之不积累。
代码语言:javascript复制
#AVG例子:
#注意:相同数据不去重复。
select avg(salary)
from instructor
where dept_name = 'Biology'
代码语言:javascript复制
#加distinct去重复:
select 聚集函数(distinct 属性)

注意:

代码语言:javascript复制
select count (*) 里面不能使用 distinct
distinct 在 max 和 min 中一样。
除了 count(*)外所有的聚集函数都忽略输入集合中的空值

如果输入的集合只有空值

avg , max, min 返回空值 count 输入空值,返回0

分组:

举例:求多个系的工资平均值

先按照系分成多个组,每个组求一个工资平均值

代码语言:javascript复制
-- 注意:出现在select子句中但没有被聚集的属性必须出现在   group by  子句中
select 属性1,属性2,聚集函数(属性)
from 表
group by 属性1,属性2(按照属性1,属性2分组)

-- 注意:筛选条件:分组后写条件用having,不分组用where
select 属性1,属性2,聚集函数(属性)
from 表
group by 属性1,属性2(按照属性1,属性2分组)
having 条件
这样先通过 having 过滤元组,然后再分组。

计算机操作顺序: From where Group BY Having Select Order Bya

练习题:

代码语言:javascript复制
select count(数字)
from instructor
本质上就是数行数

select dept_name,max(budget)
from department
group by dept_name

课后练习:

select course_id,count(ID)
from takes
group by course_id

select ID,count(course_id)
from takes
group by ID
having count(course_Id)>=3

1 人点赞