oracle 数据库2

  • DISTINCT 关键字
    去除重复行(去除某一个字段中重复行然后返回)
--查看公司有多少种职位
select DISTINCT job from emp;

也可以对多列去重,去重的原则是多个字段值的组合没有重复行(单个字段可以有重复)

select DISTINCT job,deptno from emp
  • order by 子句
    用于对给定的字段进行排序,order by 子句只能定义在查询的最后一个子句上。
    有升序 ASC,不写默认就是升序
    DESC ,降序排列
--查看公司中工资排名
select name,salary from emp order by salary DESC;

可以对多字段进行排序,每个字段可以单独指定排序方式,排序的方式从左到右进行,如果第一个字段排序完以后有相同的数据则按第二个字段排序,以此类推…
NULL 值在排序中被认作最大值

select name,salary,deptno from emp ORDER BY salary DESC,deptno ASC;
  • 聚合函数
    聚合函数是对结果集进行统计使用的
函数意义
MIN最小值
MAX最大值
AVG求和
SUM求平均值
COUNT对记录数的统计(多少条数据,不是具体的值)
--查看公司的工资情况
select MIN(salary),MAX(salary),SUM(salary),AVG(salary)
from emp;

--查看公司有多少人
select COUNT(name) from emp;

聚合函数都忽略 NULL 值,直接忽略,连人头都不算,所以一般建议这样写:

select COUNT(NVL(comm,0)) from emp;
--求表中的记录总数
select COUNT(*) from emp;
  • GROUP BY 子句,表示分组,根据…分组
    可以对结果集按照给定字段值相同的记录进行分组,基本上是配合聚合函数对结果集进行分组使用的
--查看每个部门的平均工资
select AVG(salary),deptno from emp GROUP BY deptno;

--查看每种职位的最高工资
select MAX(salary),job from emp GROUP BY job;

多字段分组,分组的几个字段值都相同的被看做一组

--查看每个部门每种职位的最高工资
select MAX(salary),deptno,job from emp GROUP BY deptno,job;
  • HAVING 与 GROUP BY
    HAVING 是跟 GROUP BY 连用的,是对分好组以后的结果集进行过滤,从而过滤出满足要求的组。
--查看部门的平均工资,前提是该部门的平均工资高于2500的
select AVG(salary),deptno from emp GROUP BY deptno HAVING AVG(salary)>2500;
  • HAVING 与 WHERE 的区别:
    HAVING 是对分组进行过滤,是数据查询出来以后决定分组的取舍的,所以必须跟在 GROUP BY 后面,WHERE 是在查询过程中对记录进行过滤,所以过滤时机是先 WHERE 后 HAVING
--查看平均工资高于2000的部门的最高工资与最低工资
select MAX(salary),MIN(salary),deptno
from emp
GROUP BY deptno
HAVING AVG(salary)>2000;

查询语句执行顺序:

  1. from 子句:执行顺序从后往前,从右往左(数据量少的表尽量放在后面);
  2. where 子句:执行顺序自上而下,从右到左(将能过滤掉最大记录数的条件写在最右边);
  3. group by 子句:执行顺序从左往右分组(建议使用 where 在 group by 之前将不需要的记录过滤掉);
  4. having 子句:消耗资源(尽量避免使用,having 会在检索出所有记录之后才对结果进行过滤,需要排序等操作);
  5. select 子句:少用 * ,尽量取字段名称。(oracle 在解析过程中通过通过查询数据字段将 * 号依次转换成所有的列名,消耗时间);
  6. order by 子句:执行顺序从左到右排序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值