-
1核心:通过别名,将同一张表视为多张表
2select e.ename 员工姓名,b.ename 老板姓名 from emp e,emp b
where e.mgr=b.empno;
查看全部 -
1外连接就是为了解决:通过外链接,把对于连接条件上不成立的记录,仍然包含在最后的结果中,
2 左外链接:当连接条件不成立的时候,等号左边的表仍然被包含 where e.deptno=d.deptno(+)
3右外链接:当连接条件不成立的时候,等号右边的表仍然被包含 where e.deptno(+)=d.deptno
查看全部 -
select e.ename,e.sal,s.grade
from emp e,salgrade s
where e.sal between s.losal and s.hisal
1超过一张表就属于多表查询
2多表查询基于笛卡尔集
3.加上自己的筛选条件(等于连接 不等于连接 外连接 自连接)
查看全部 -
1.笛卡尔集:emp*dept.列数相加,行数相乘
2.通过连接条件,避免使用笛卡尔全集
查看全部 -
groupby语句增强
select deptno,job,sum(sal)
from emp group by rollup(deptno,job);
group by rollup分组等价于 group by deptno +group by job+null group by null
工作中用法:
select deptno,job,count(EMPNO) from emp group by rollup(deptno,job)
分别按照部门,职位统计,只按照部门统计,全数统计
查看全部 -
select max (avg(sal))
from emp
group by deptno;
查看全部 -
having与where区别
查看全部 -
from 后面可以是表,也可以是查询语句
查看全部 -
使用子查询,where ,having,select(单行子查询,返回一个结果),from(查询语句,看成是一张表),group by 不能使用子查询
查看全部 -
select sum(sal) ,
sum(decode(to_char(hiredate,'YYYY'),'1980',1,0)) "1980" ,
sum(decode(to_char(hiredate,'YYYY'),'1981',1,0)) "1981" ,
sum(decode(to_char(hiredate,'YYYY'),'1982',1,0)) "1982" ,
sum(decode(to_char(hiredate,'YYYY'),'1987',1,0)) "1987"
from emp;
查看全部 -
执行计划:explain plan from select .......
查看执行计划:select * from table(dbms_xplan.display);
select empno,empname,sal,(select avg(sal) from emp where deptno=e.deptno) avgsal from emp e
where sal>(select avg(sal) from emp where e.deptno=deptno)
查看全部 -
select e.depno,e.empno,e.empname,f.avgsal
from emp e,(select depno,avg(sal) avgsal from emp group by depno) f
where e.depno=f.depno and e.sal>f.avgsal
查看全部 -
select r,empno,empname,sal from
(select rownum r , empno,empname,sal
from (select rownum,empno,empname,sal from emp where order by sal desc ) a1 where rownum<=8) a2
where r>=5
查看全部 -
group by:所有未包含在组函数中的列必须包含在group by子句中
group by:只能使用having进行条件筛选
break on deptno skip 2:相同的部门号只显示一次,不同的部门号跳过两行(间隔两行)
set pagesize:设置查询页面的大小
group by:主要应用于报表
where:子句中不能使用组函数
能使用where语句的不使用having
查看全部 -
查询工资大于部门平均工资的员工
--相关子查询:
select empno,ename,sal,(select avg(sal) from emp where deptno=e.deptno) avgsalfrom emp e
where sal>(select avg(sal) from emp where deptno=e.deptno)
--多表查询:
select e.empno,e.ename,e.sal,d.avgsal
from emp e,(select deptno,avg(sal) avgsal from emp group by deptno) d
where e.deptno=d.deptno and e.sal>d.avgsal
--比较解释计划窗口 的相关子查询比多表查询占用cpu少
查看全部
举报