数据库-04
--聚合函数:
返回一个值,对表中所有行进行统计,忽略NULL值
--sum:求和(只能数字类型)
select sum(age) from stuInfo
--avg:平均值(只能数字类型)
select avg(age) from stuInfo
--max:最大值(只能数字类型或者是字符串)
select max(name) from stuInfo
--min:最小值(只能数字类型或者是字符串)
select min(age) from stuInfo
--count:总个数---获取表总行数使用count(*),count(主键)
select count(id) from stuInfo --建议使用
select count(*) from stuInfo
分组
分组使用group by 关键字
分组后如果有条件的话就要使用having关键字
条件就写在having后面
Having后面的筛选一般用聚合函数
group by使用说明:
1.select后面出现的列(除了聚合函数中的列)
必须包含在group by中
2.where是对分组之前数据做筛选,having是对分组之后数据做筛选
where后面一般对某个列做操作,having后面一般对聚合函数做操作
若同时出现,必须遵守顺序:where...group by...having
表链接(联合查询)
--内联接(inner join)
--获取两个表的共有的数据
--工作原理:一个表的一行匹配另一个表的所有行(类似于双层for循环)
select name,s.stuId,labExam
from student s
inner join marks m
on s.stuId=m.stuId
select name,s.stuId,labExam
from student s
join marks m
on s.stuId=m.stuId
select name,s.stuId,labExam
from student s
inner join marks m
on 1=1 --相当于没有条件
--左外联接(left [outer] join)
--获取两个表共有的数据以及左表的其余数据
--工作原理同内联接
--在select查询列表中,显示关联键时,建议写成---左表.主键
select *
from student s
left outer join marks m
on s.stuId=m.stuId
select name,s.stuId,labExam
from student s
left join marks m
on s.stuId=m.stuId
select name,m.stuId,labExam
from student s
left join marks m
on s.stuId=m.stuId
--右外联接(right [outer] join)
--获取两个表共有的数据以及右表的其余数据
--工作原理同内联接
--在select查询列表中,显示关联键时,建议写成---右表.主键
select name,s.stuId,labExam
from marks m
right join student s
on m.stuId=s.stuId
select name,s.stuId,labExam
from marks m
right outer join student s
on m.stuId=s.stuId
--完整外联接(full [outer] join)--不要求(用得少)
--返回两个表的所有数据(共有数据,左表其余数据,右表其余数据)
select name,s.stuId,labExam
from student s
full join marks m
on s.stuId=m.stuId
--交叉联接(cross join)--不要少(用得少)
--左表一条匹配右表所有条,相当于没有条件的内联接
--工作原理同内联接
select *
from student s
cross join marks m
select * from student
select * from marks
--表联接有额外条件
--方式一:on后写where
select name,s.stuId,labExam
from student s
inner join marks m
on s.stuId=m.stuId
where labExam>=60
--方式二:on后直接跟and
select name,s.stuId,labExam
from student s
inner join marks m
on s.stuId=m.stuId
and labExam>=60