一、聚合函数
1.定义
聚合函数:将一列数据作为一个整体
2.常见的聚合函数
3.用法
注:在使用聚合函数时,所有的null值是不参与计算的
4.代码展示
# --------------------------聚合函数------------------------
# 1.统计该企业(即itheima数据库中的emp表)员工数量
select count(*) from emp;
# (*代表的是全部字段,也可以是name字段等等)
# 2.统计该企业员工的平均年龄
select avg(age) from emp;
# (所有的null值不参与计算)
# 3.统计该企业员工的最大年龄
select max(age) from emp;
# 4.统计该企业员工的最小年龄
select min(age) from emp;
# 5.西安地区所有员工的年龄和
# (如果想要添加限制条件,用where即可)
select sum(age) from emp where workaddress = '西安';
二、分组查询
1.语法
where和having的区别:
(1)执行时机不同
where是分组之前进行过滤,不满足where条件不参与having分组;
having是分组之后对结果进行过滤。
(2)判断条件不同
where不能对聚合函数进行判断;
having能对聚合函数进行判断。
注:
- 执行顺序:where > 复合函数 > having;
- 分组之后,查询的字段一般为复合函数和分组字段,查询其他字段无任何意义。
2.代码展示
# --------------------------分组查询------------------------
# 1.根据性别分组,统计男性员工和女性员工的数量
select sex, count(*) from emp group by sex;
# 2.根据性别分组,统计男性员工和女性员工的平均年龄
select sex, avg(age) from emp group by sex;
# 3.查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址
select workaddress, count(workaddress) from emp where age < 45 group by workaddress having count(*) >= 3;
三、排序查询
1.语法
注:
SQL语言支持多字段排序
2.排序方式
ASC:升序(默认值)
DESC:降序
注:
如果是多字段排序,当第一个字段值相同时,才会根据第二个字段排序。
3.代码演示
# # --------------------------排序查询------------------------
# 1.根据年龄对公司的员工进行升序排序
select * from emp order by age;
# 升序排列用ASC表示,可以省略不写
# 2.根据入职时间,对员工进行降序排序
select * from emp order by entrydate DESC;
# 3.根据年龄对公司员工进行升序排序,年龄相同,再按照入职时间进行降序排序
select * from emp order by age, entrydate DESC;
四、分页查询
1.语法
注:
2.代码展示
# --------------------------排序查询------------------------
# 1.查询第1页员工数据,每页展示10条记录
select * from emp LIMIT 0,10;
# (页数起始索引从0开始,所以第一页用0表示,也可以省略,第二个数是每页的信息条数
# 2.查询第2页员工数据,每页展示10条记录
select * from emp LIMIT 10,10; # (2-1)*10=10,所以第一个数字是10
# (第2页往公式:(页码数-1)*每页展示的信息数)
五、练习题
# --------------------------案例------------------------
# 1.查询年龄为20,21,22,23岁的员工信息
select * from emp where age in (20,21,22,23);
# 2.查询性别为男,并且年龄在20~40岁(含)以内的姓名为三个字的员工
select * from emp where sex = '男' and age >=20 and age <=40 and name like '___';
# 3.统计员工表中,年龄小于60岁的,男性员工和女性员工的人数
select sex, count(*) from emp where age < 60 group by sex;
# 4.查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排列,如果年龄相同按入职时间降序排列
select name, age, entrydate from emp where age <= 35 order by age, entrydate DESC ;
# 5.查询性别为男,且年龄在20~40岁(含)以内的前5个员工信息,对查询结果按年龄升序排列,年龄相同按入职时间升序排列
select * from emp where sex = '男' and age between 20 and 40 order by age, entrydate limit 5 ;
六、执行顺序
1.顺序
2.代码演示
# --------------------------执行顺序------------------------
# 查询年龄大于15的员工的姓名,年龄,并根据年龄进行升序排列
select name, age from emp where age >15 order by age;
# 先执行from,在执行where,假设给emp起个别名e,则可以使用别名e
# e.age就代表的是emp里面的age
select name, age from emp e where e.age >15 order by age;