Oracle数据库学习笔记(三)——排序分组

1、排序

select 列名,列名,..,列名 from 表名 where 条件表达式 order by 排序列的列名 asc|desc;

asc|desc: asc表示升序,desc表示降序

--查询员工信息,按照员工的工资升序排序
select * from emp order by sal asc; ---如果是升序排序,asc可以省略
select * from emp order by sal;

--查询员工信息,按照员工编号降序排序
select * from emp order by empno desc;

order by :后面可以跟多个排序列,跟多个排序列时,
它的含义:按照第一排序列(紧跟前order by 关键字的列)排序,
如果第一个排序字段的值相同时,它会按照第二个排序字段进行排序

--查询员工信息,按照部门编号升序排序,如果部门编号相同时,按照工资的升序排序

select * from emp order by deptno asc,sal asc;

--查询员工信息,按照部门编号降序排序,如果部门编号相同,按照员工编号升序排序

select * from emp order by deptno desc,empno;

--查询员工的编号、姓名、工作、工资、部门编号,按照部门编号升序排序,如果部门相同时,按照工资降序排序
select empno,ename,job,sal,deptno from emp order by deptno,sal desc;

注意:order by 后面除了可以跟表中的列名外,还可以跟select 和from之间查询结果的序号
select empno,ename,job,sal,deptno from emp order by 5,4 desc;

select empno,sal,job,ename,deptno from emp order by 5,2 desc;

2、聚合函数

聚合函数:对一组值执行计算,并返回单个值
count(列名|*|常数):它求记录数(数据条数)
max(列名):取最大值
min(列名):取最小值
avg(列名):取平均值
sum(列名):求和

--查询员工表中的员工人数
select count(empno) from emp;
select count(*) from emp;
select count(1) from emp;

count(主键列或索引列)
count(*)
count(常数)
count(普通列)
它们执行效率从上到下,依次降低

--查询emp表中的部门数
select count(deptno) from emp;
select deptno from emp;

distinct:去重关键字,跟在列的最前面
select distinct deptno from emp;

select count(distinct deptno) from emp;

select empno,distinct deptno from emp; --这个sql语句是错误的

select distinct empno,deptno from emp;

注意:distinct后面跟多个列时,判断重复数据,所有列的值完全相同时,它才会认为是重复数据

--查询工资总和
select sum(sal) from emp;

--查询员工的平均工资
select avg(sal) from emp;

--查询10号部门的最高工资
select max(sal) from emp where deptno=10;

--查询最低工资
select min(sal) from emp;

3、分组

select 列名,列名,...,列名 from 表名
where 条件
group by 分组列
order by 排序列 asc|desc

group by:分组的关键字,后面跟分组列名,可以是一个分组列,也可以是多个列

--查询各个部门的部门编号和部门的平均工资
select deptno,avg(sal) from emp group by deptno;

select empno,min(sal),max(sal),avg(sal),sum(sal),count(*) from emp group by empno;

--查询各个部门的员工人数
select deptno,count(empno) from emp group by deptno;

select job,deptno,count(*) from emp group by job,deptno;
注意:group by 后面跟多个列时,只有当多个列的值同时相等时,它才会分为同一个组;

4、having

ol_name,col_name,...,col_name
from 表名
where 条件
group by 分组列
having 条件
order by 排序列

having:它是对分组后的数据进行筛选,条件表达式中可以使用聚合函数

--查询各个部门的部门编号和部门的平均工资
select deptno,avg(sal) from emp group by deptno;

--求平均工资大于2000的部门编号和平均工资
select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;

where和having的异同
where:条件,where后面跟的条件比having后的条件先执行,条件中不允许使用聚合函数。
having:条件中可以使用聚合函数,一般having和group by联用。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.简介 数据存储有哪些方式?电子表格,纸质文件,数据库。 那么究竟什么是关系型数据库? 目前对数据库的分类主要是...
    A建飞_dedf阅读 717评论 0 0
  • 1.简介 数据存储有哪些方式?电子表格,纸质文件,数据库。 那么究竟什么是关系型数据库? 目前对数据库的分类主要是...
    乔震阅读 2,067评论 0 2
  • 1.SQL基础 数据定义语言DDL:create(创建)、alter(更改)和drop(删除)命令。 数据操纵语言...
    文袁阅读 778评论 0 4
  • 1.了解Orcale数据库 Orcale数据库的优点性能非常的好安全性高,满足ISO标准对分布式的支持非常好 2....
    随手点灯阅读 1,588评论 1 15
  • 大多数的理科知识一样,需要初学者具有一下方面的思想准备: 一是不管出于什么样的动机,都需要对新知识点产生学习兴趣,...
    永杰gg阅读 773评论 0 1

友情链接更多精彩内容