【Oracle 数据库】奶妈式教程day04 排序查询

42 篇文章 8 订阅
30 篇文章 9 订阅

排序分组

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;

SQL语句执行顺序

FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY

2 聚合函数

聚合函数:对一组值执行计算,并返回单个值。

count(列名|*|常数):它求记录数(数据条数)

max(列名):取最大值

min(列名):取最小值

avg(列名):取平均值

sum(列名):求和

举例:查询员工表中的员工人数

SELECT COUNT(empno) FROM emp;
SELECT COUNT(*) FROM emp;
SELECT COUNT(1) FROM emp;

count(主键列或索引列)
count(*)
count(常数)
count(普通列)
它们执行效率从上到下,依次降低。
null值不会参与 count计数。

举例:查询emp表中的部门数

select count(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 deptno,count(empno) from emp group by deptno;

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

4 HAVING

select col_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联用。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值