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;