数据库学习4-聚合函数,排序,分页

本文介绍了SQL的基础知识,包括常用的聚合函数如min(), max(), count(), avg(), sum()等,以及分组查询(group by)和筛选(having)的用法。此外还讲解了排序(order by)、集合操作符(union, union all, minus, intersect)和伪列(rowid, rownum)的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


5种聚合函数
  min()、max()、count()、avg()、sum()
分组查询
  group by 
   字段没有聚合函数的情况下必须在select 、having、order by中出现
分组完筛选
  having
分组完后筛选再聚合
  
==============================
排序
  order by
整个查询的语法顺序
  select ... from tableName where ... group by ... having... order by... (默认asc) [desc]  
集合操作符的作用及使用
  union、union all、minus、intersect
伪列?
  rownum 、 rowid

利用minus与rownum进行分页


SELECT ename AS 姓名,job AS 工作,hiredate FROM emp 
 WHERE sal<2000;
SELECT ename mz,job gz,hiredate rzrq FROM emp;

--DISTINCT 放在字段前,该列会去掉重复值
--查看公司里面有哪些工作岗位
SELECT DISTINCT job FROM emp;

/*
  分组(聚合)函数
*/
--查看公司有多少个员工
--表中所有的记录数
SELECT COUNT(*) FROM emp;
--该字段is not null的个数
SELECT COUNT(comm) FROM emp;
--该字段is not null的不重复个数
SELECT COUNT(DISTINCT job) FROM emp;

--查看公司工资最高的 最大值
SELECT MAX(sal) FROM emp;

--查看公司里资格最老的员工 最小值
SELECT MIN(hiredate) FROM emp;

--查看公司里平均薪水
SELECT AVG(sal) FROM emp;

--查看公司工资总和
SELECT SUM(sal) FROM emp;
SELECT SUM(sal)*6.35 FROM emp;
SELECT SUM(sal*6.35) FROM emp;

--group by 分组子句
--查询每个部门的最高薪水
SELECT deptno,MAX(sal) FROM emp GROUP BY deptno;

--查看每个部门资格最老的员工
SELECT deptno,MIN(hiredate) FROM emp GROUP BY deptno;

--查看每个工作岗位上有多少员工
SELECT job,COUNT(empno) FROM emp GROUP BY job;

--查看每个部门工资高于1000的员工数量
SELECT deptno,COUNT(*) FROM emp 
  WHERE sal>1000 
   GROUP BY deptno;

--group by 中出现的字段才允许在 select 中出现,除非是分组函数括起来的
SELECT job 职位,COUNT(empno) 人数,MAX(sal) 最高工资 FROM emp
  GROUP BY job;
  
--group by 字段1,字段2...  

--查看部门人数不少于3个人的部门 
--where子句不允许分组函数
--where和having都是条件筛选,
--   where子句是分组前的条件筛选;
--   having子句是分组后的条件筛选;
SELECT deptno,COUNT(*) FROM emp 
   GROUP BY deptno
     HAVING COUNT(*)>=3;
     
--查询每个工作岗位上薪水大于1000且人数少于3个人的岗位
SELECT job,COUNT(*) FROM emp
   WHERE sal>1000
    GROUP BY job 
     HAVING COUNT(*)<3;
     
/*
  排序 order by [默认asc|desc]
*/
--按照入职日期排序,最老的员工排最前面(升序)
SELECT * FROM emp ORDER BY hiredate;
SELECT * FROM emp ORDER BY hiredate ASC;
--按照工资排序,薪水最高的排最前面(降序)
SELECT * FROM emp ORDER BY sal DESC;

--根据多个字段排序时:字段从左到右的顺序分别排序
--按照员工所在的部门(降序)以及员工的名字排序(升序)
SELECT * FROM emp ORDER BY deptno DESC,ename;

SELECT * FROM emp WHERE sal>2000 ORDER BY sal;
--group by 中出现的字段才允许在 order by 中出现,除非是分组函数括起来的
SELECT job,COUNT(*) FROM emp 
  GROUP BY job 
    ORDER BY COUNT(*);

--select 中的子句按照出现的先后顺序执行    
SELECT ... FROM table_name 
   WHERE expr
    GROUP BY field_name1,field_name2...
     HAVING expr
      ORDER BY field_name1,field_name2...;
     
--伪列 rowid,rownum
--rowid 是记录在数据库中的唯一性物理地址编码
SELECT ROWID,empno,ename,job,hiredate FROM emp;
SELECT ROWID,rownum,empno,ename,job,hiredate FROM emp;
--rownum 可以作为记录的顺序号,where子句中 rownum只能小于操作
SELECT ROWNUM,emp.* FROM emp WHERE ROWNUM<11;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值