Oracle数据库的基本功,主要涉及一些小算法,比如求部门中谁的薪水最高,谁是经理等等。希望能满足那些苦苦找寻正确解决方法的DBA们。
以下的文章,主要为大家在实际工作中提供一种解决方法。
---用户名:scott
---密 码:tiger
---*********Oracle表连接与子查询示例************
---求部门中哪些人的薪水最高
- selectename,salfromemp
- join(selectmax(sal)max_sal,deptnofromempgroupbydeptno)t
- on(emp.sal=t.max_salandemp.deptno=t.deptno);
---求部门平均薪水的等级
- selectdeptno,avg_sal,gradefrom
- (selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t
- joinsalgradeson(t.avg_salbetweens.losalands.hisal);
---求部门平均的薪水等级
- selectdeptno,avg(grade)from
- (selectdeptno,ename,gradefromempjoinsalgradeson(emp.salbetweens.losalands.hisal))t
- groupbydeptno;
---雇员中哪些人是经理人
- selectenamefromempwhereempnoin(selectdistinctmgrfromemp);
---不用组函数,求薪水的最高值
- selectsalfromempwheresalnotin
- (selectdistincte1.salfromempe1joinempe2on(e1.sal<e2.sal));
---用组函数,求薪水的最高值
- selectmax(sal)fromemp;
---求平均薪水最高的部门的部门编号
- selectdeptno,avg_salfrom
- (selectavg(sal)avg_sal,deptnofromempgroupbydeptno)t
- whereavg_sal=
- (selectmax(avg_sal)from(selectavg(sal)avg_sal,deptnofromempgroupbydeptno)t);
----组函数嵌套的写法
- selectdeptno,avg_salfrom
- (selectavg(sal)avg_sal,deptnofromempgroupbydeptno)t
- whereavg_sal=
- (selectmax(avg(sal))fromempgroupbydeptno);
---求平均薪水最高的部门的名称
- selectdnamefromdept
- wheredeptno=
- (
- selectdeptnofrom
- (selectavg(sal)avg_sal,deptnofromempgroupbydeptno)t
- whereavg_sal=
- (selectmax(avg_sal)from(selectavg(sal)avg_sal,deptnofromempgroupbydeptno)t)
- );
---求平均薪水的等级最低的部门的部门名称
- selectavg(sal)avg_sal,deptnofromempgroupbydeptno
--部门平均薪水
0
- selectdeptno,avg_sal,gradefrom
- (selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t
- joinsalgradeson(t.avg_salbetweens.losalands.hisal);
--平均工资的最小值
1
- selectdeptno,avg_sal,gradefrom
- (selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t
- joinsalgradeson(t.avg_salbetweens.losalands.hisal);
--平均工资的最小值及部门编号
2
- selectdeptno,avg_sal,gradefrom
- (selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t
- joinsalgradeson(t.avg_salbetweens.losalands.hisal);
--平均工资的最小值及部门编号和工资等级
3
- selectdeptno,avg_sal,gradefrom
- (selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t
- joinsalgradeson(t.avg_salbetweens.losalands.hisal);
--平均工资的最小值及部门编号和工资等级及部门名称
----Another 按照题意的写法
4
- selectdeptno,avg_sal,gradefrom
- (selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t
- joinsalgradeson(t.avg_salbetweens.losalands.hisal);
---创建视图或者表,如果没有权限
5
- selectdeptno,avg_sal,gradefrom
- (selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t
- joinsalgradeson(t.avg_salbetweens.losalands.hisal);
--已连接。
6
- selectdeptno,avg_sal,gradefrom
- (selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t
- joinsalgradeson(t.avg_salbetweens.losalands.hisal);
--授权成功。
---创建视图
7
- selectdeptno,avg_sal,gradefrom
- (selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t
- joinsalgradeson(t.avg_salbetweens.losalands.hisal);
--视图已建立。
---创建这个v$_dept_avg_sal_info视图可以简化上面那个查询的重复代码
8
- selectdeptno,avg_sal,gradefrom
- (selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t
- joinsalgradeson(t.avg_salbetweens.losalands.hisal);
---求比普通员工的最高薪水还要高的经理的名称
9
- selectdeptno,avg_sal,gradefrom
- (selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t
- joinsalgradeson(t.avg_salbetweens.losalands.hisal);
--普通员工的最高薪水
0
- selectdeptno,avg(grade)from
- (selectdeptno,ename,gradefromempjoinsalgradeson(emp.salbetweens.losalands.hisal))t
- groupbydeptno;
--普通员工的最高薪水还要高的经理的名称
--- Oracle 联机归档日志 备份方式
---求薪水最高的第6名到第10名雇员(rownum)
1
- selectdeptno,avg(grade)from
- (selectdeptno,ename,gradefromempjoinsalgradeson(emp.salbetweens.losalands.hisal))t
- groupbydeptno;
---五种约束条件
2
- selectdeptno,avg(grade)from
- (selectdeptno,ename,gradefromempjoinsalgradeson(emp.salbetweens.losalands.hisal))t
- groupbydeptno;
---PL/SQL 一个简单的存储过程 分为四块1.声明declare 2.begin 3.exception 4.end
3
- selectdeptno,avg(grade)from
- (selectdeptno,ename,gradefromempjoinsalgradeson(emp.salbetweens.losalands.hisal))t
- groupbydeptno;
---%type 变量声明的好处。
4
- selectdeptno,avg(grade)from
- (selectdeptno,ename,gradefromempjoinsalgradeson(emp.salbetweens.losalands.hisal))t
- groupbydeptno;
---Table 变量类型
5
- selectdeptno,avg(grade)from
- (selectdeptno,ename,gradefromempjoinsalgradeson(emp.salbetweens.losalands.hisal))t
- groupbydeptno;
---Record 变量类型
6
- selectdeptno,avg(grade)from
- (selectdeptno,ename,gradefromempjoinsalgradeson(emp.salbetweens.losalands.hisal))t
- groupbydeptno;
---使用 %rowtype声明record变量
7
- selectdeptno,avg(grade)from
- (selectdeptno,ename,gradefromempjoinsalgradeson(emp.salbetweens.losalands.hisal))t
- groupbydeptno;
---SQL语句的运用
8
- selectdeptno,avg(grade)from
- (selectdeptno,ename,gradefromempjoinsalgradeson(emp.salbetweens.losalands.hisal))t
- groupbydeptno;
---sql%rowcount 多少条记录被影响
9
- selectdeptno,avg(grade)from
- (selectdeptno,ename,gradefromempjoinsalgradeson(emp.salbetweens.losalands.hisal))t
- groupbydeptno;
--create语句
0
- selectenamefromempwhereempnoin(selectdistinctmgrfromemp);
---if语句,取出7369的薪水,如果<1200,则输出'low',如果<2000则输出'middle',否则输出'high'.
1
- selectenamefromempwhereempnoin(selectdistinctmgrfromemp);
---循环 loop (相当于do while)
2
- selectenamefromempwhereempnoin(selectdistinctmgrfromemp);
--- 异常处理
3
- selectenamefromempwhereempnoin(selectdistinctmgrfromemp);
---记录数据库错误信息的errorlog
4
- selectenamefromempwhereempnoin(selectdistinctmgrfromemp);
---游标
5
- selectenamefromempwhereempnoin(selectdistinctmgrfromemp);
---带参数的游标
6
- selectenamefromempwhereempnoin(selectdistinctmgrfromemp);
---课更新的游标
7
- selectenamefromempwhereempnoin(selectdistinctmgrfromemp);
----创建存储过程
8
- selectenamefromempwhereempnoin(selectdistinctmgrfromemp);
---带参数的存储过程
9
- selectenamefromempwhereempnoin(selectdistinctmgrfromemp);
---函数
0
- selectsalfromempwheresalnotin
- (selectdistincte1.salfromempe1joinempe2on(e1.sal<e2.sal));
----触发器
1
- selectsalfromempwheresalnotin
- (selectdistincte1.salfromempe1joinempe2on(e1.sal<e2.sal));
---更改有依赖关系的表的字段值的建立的一个触发器
2
- selectsalfromempwheresalnotin
- (selectdistincte1.salfromempe1joinempe2on(e1.sal<e2.sal));
---树状结构的存储与展示
3
- selectsalfromempwheresalnotin
- (selectdistincte1.salfromempe1joinempe2on(e1.sal<e2.sal));
---用存储过程展示树状结构(用递归的方式实现)
4
- selectsalfromempwheresalnotin
- (selectdistincte1.salfromempe1joinempe2on(e1.sal<e2.sal));
【编辑推荐】
- Oracle 数据集成的实际解决方案
- 对Oracle Raw常见类型的解释
- Oracle归档模式的相关切换的实际操作步骤
- Oracle数据库的启用与关闭的归档模式
- Oracle修改字段类型2种方案介绍
知优网 » 细数你应该修炼的Oracle基本功