高级查询
1.聚合函数
分组之后的一个阶段存在多个不同的值,那么你就需要使用聚合函数将这些列段的多个值整成一个值,所以就称为聚合函数---(聚合函数就是将一个阶段的不同值合为一个值)
-
count();
-
计算符合条件的行数
-
-
sum();
-
求和
-
-
avg();
-
平均值
-
-
max();
-
最大值
-
-
min();
-
最小值
-
-
select count(*) from 表名;
-
聚合函数一般处于select 后面,并且可以用于子查询
-
-
当把所有值合在一起,给出一个语句的时候,只能使用聚合函数,不能使用其他正常字段
2.联表查询(将两个表之间的数据同时连接在一个表里面)
联表查询时一定指明来自哪个表,联表不用*
-
select * from 表名1 别名1 inner join 表名2 别名2 on 别名1.列段 = 别名2.列段;
-
on后面表示联表条件(两个表之间有哪个列段是可以将两个表联接起来的)
-
select a.no,b.name from room a inner join type b on a.type_id = b.id;
-
-
内联接
-
inner join
-
只有两个表所对应的都有数据时才显示
-
先把表与表之间有联系的列段将表关联起来,再取出所需数据列段
-
-
左联接
-
left join
-
select a.no,b.name from room a left join type b on a.type_id = b.id;
-
不管两个表所对应的有没有数据左边的a表的代码全部显示
-
-
-
右联接
-
right join
-
select a.no,b.name from room a right join type b on a.type_id = b.id;
-
不管两个表所对应的有没有数据右边的b表的代码全部显示
-
-
3.分组及筛选
-
分组:
group by
列段-
分组必须写在where 后面
-
select sex,count(*) from user group by sex;
-
分组时查询处只能出现聚合函数和分组字段
-
先分组再计数
-
count(*)中的星号在有要求的时候可以换成具体字段
-
比如考试分数为score 考生写写没去考试,score为null值,统计的时候可以换为count(指定表名.score)
-
-
-
-
筛选:
having
-
分组之后的数据只能使用having筛选,不能使用where条件,两者本质差不多
-
-
先联表---再分组---再筛选---再排序表