Oracle数据库的基本功,主要涉及一些小算法,比如求部门中谁的薪水最高,谁是经理等等。希望能满足那些苦苦找寻正确解决方法的DBA们。

以下的文章,主要为大家在实际工作中提供一种解决方法。

细数你应该修炼的Oracle基本功  Oracle 第1张

---用户名:scott

---密 码:tiger

---*********Oracle表连接与子查询示例************

---求部门中哪些人的薪水最高

  1. selectename,salfromemp
  2. join(selectmax(sal)max_sal,deptnofromempgroupbydeptno)t
  3. on(emp.sal=t.max_salandemp.deptno=t.deptno);

---求部门平均薪水的等级

  1. selectdeptno,avg_sal,gradefrom
  2. (selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t
  3. joinsalgradeson(t.avg_salbetweens.losalands.hisal);

---求部门平均的薪水等级

  1. selectdeptno,avg(grade)from
  2. (selectdeptno,ename,gradefromempjoinsalgradeson(emp.salbetweens.losalands.hisal))t
  3. groupbydeptno;

---雇员中哪些人是经理人

  1. selectenamefromempwhereempnoin(selectdistinctmgrfromemp);

---不用组函数,求薪水的最高值

  1. selectsalfromempwheresalnotin
  2. (selectdistincte1.salfromempe1joinempe2on(e1.sal<e2.sal));

---用组函数,求薪水的最高值

  1. selectmax(sal)fromemp;

---求平均薪水最高的部门的部门编号

  1. selectdeptno,avg_salfrom
  2. (selectavg(sal)avg_sal,deptnofromempgroupbydeptno)t
  3. whereavg_sal=
  4. (selectmax(avg_sal)from(selectavg(sal)avg_sal,deptnofromempgroupbydeptno)t);

----组函数嵌套的写法

  1. selectdeptno,avg_salfrom
  2. (selectavg(sal)avg_sal,deptnofromempgroupbydeptno)t
  3. whereavg_sal=
  4. (selectmax(avg(sal))fromempgroupbydeptno);

---求平均薪水最高的部门的名称

  1. selectdnamefromdept
  2. wheredeptno=
  3. (
  4. selectdeptnofrom
  5. (selectavg(sal)avg_sal,deptnofromempgroupbydeptno)t
  6. whereavg_sal=
  7. (selectmax(avg_sal)from(selectavg(sal)avg_sal,deptnofromempgroupbydeptno)t)
  8. );

---求平均薪水的等级最低的部门的部门名称

  1. selectavg(sal)avg_sal,deptnofromempgroupbydeptno

--部门平均薪水

  1. selectdeptno,avg_sal,gradefrom
  2. (selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t
  3. joinsalgradeson(t.avg_salbetweens.losalands.hisal);
0

--平均工资的最小值

  1. selectdeptno,avg_sal,gradefrom
  2. (selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t
  3. joinsalgradeson(t.avg_salbetweens.losalands.hisal);
1

--平均工资的最小值及部门编号

  1. selectdeptno,avg_sal,gradefrom
  2. (selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t
  3. joinsalgradeson(t.avg_salbetweens.losalands.hisal);
2

--平均工资的最小值及部门编号和工资等级

  1. selectdeptno,avg_sal,gradefrom
  2. (selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t
  3. joinsalgradeson(t.avg_salbetweens.losalands.hisal);
3

--平均工资的最小值及部门编号和工资等级及部门名称

----Another 按照题意的写法

  1. selectdeptno,avg_sal,gradefrom
  2. (selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t
  3. joinsalgradeson(t.avg_salbetweens.losalands.hisal);
4

---创建视图或者表,如果没有权限

  1. selectdeptno,avg_sal,gradefrom
  2. (selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t
  3. joinsalgradeson(t.avg_salbetweens.losalands.hisal);
5

--已连接。

  1. selectdeptno,avg_sal,gradefrom
  2. (selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t
  3. joinsalgradeson(t.avg_salbetweens.losalands.hisal);
6

--授权成功。

---创建视图

  1. selectdeptno,avg_sal,gradefrom
  2. (selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t
  3. joinsalgradeson(t.avg_salbetweens.losalands.hisal);
7

--视图已建立。

---创建这个v$_dept_avg_sal_info视图可以简化上面那个查询的重复代码

  1. selectdeptno,avg_sal,gradefrom
  2. (selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t
  3. joinsalgradeson(t.avg_salbetweens.losalands.hisal);
8

---求比普通员工的最高薪水还要高的经理的名称

  1. selectdeptno,avg_sal,gradefrom
  2. (selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t
  3. joinsalgradeson(t.avg_salbetweens.losalands.hisal);
9

--普通员工的最高薪水

  1. selectdeptno,avg(grade)from
  2. (selectdeptno,ename,gradefromempjoinsalgradeson(emp.salbetweens.losalands.hisal))t
  3. groupbydeptno;
0

--普通员工的最高薪水还要高的经理的名称

--- Oracle 联机归档日志 备份方式

---求薪水最高的第6名到第10名雇员(rownum)

  1. selectdeptno,avg(grade)from
  2. (selectdeptno,ename,gradefromempjoinsalgradeson(emp.salbetweens.losalands.hisal))t
  3. groupbydeptno;
1

---五种约束条件

  1. selectdeptno,avg(grade)from
  2. (selectdeptno,ename,gradefromempjoinsalgradeson(emp.salbetweens.losalands.hisal))t
  3. groupbydeptno;
2

---PL/SQL 一个简单的存储过程 分为四块1.声明declare 2.begin 3.exception 4.end

  1. selectdeptno,avg(grade)from
  2. (selectdeptno,ename,gradefromempjoinsalgradeson(emp.salbetweens.losalands.hisal))t
  3. groupbydeptno;
3

---%type 变量声明的好处。

  1. selectdeptno,avg(grade)from
  2. (selectdeptno,ename,gradefromempjoinsalgradeson(emp.salbetweens.losalands.hisal))t
  3. groupbydeptno;
4

---Table 变量类型

  1. selectdeptno,avg(grade)from
  2. (selectdeptno,ename,gradefromempjoinsalgradeson(emp.salbetweens.losalands.hisal))t
  3. groupbydeptno;
5

---Record 变量类型

  1. selectdeptno,avg(grade)from
  2. (selectdeptno,ename,gradefromempjoinsalgradeson(emp.salbetweens.losalands.hisal))t
  3. groupbydeptno;
6

---使用 %rowtype声明record变量

  1. selectdeptno,avg(grade)from
  2. (selectdeptno,ename,gradefromempjoinsalgradeson(emp.salbetweens.losalands.hisal))t
  3. groupbydeptno;
7

---SQL语句的运用

  1. selectdeptno,avg(grade)from
  2. (selectdeptno,ename,gradefromempjoinsalgradeson(emp.salbetweens.losalands.hisal))t
  3. groupbydeptno;
8

---sql%rowcount 多少条记录被影响

  1. selectdeptno,avg(grade)from
  2. (selectdeptno,ename,gradefromempjoinsalgradeson(emp.salbetweens.losalands.hisal))t
  3. groupbydeptno;
9

--create语句

  1. selectenamefromempwhereempnoin(selectdistinctmgrfromemp);
0

---if语句,取出7369的薪水,如果<1200,则输出'low',如果<2000则输出'middle',否则输出'high'.

  1. selectenamefromempwhereempnoin(selectdistinctmgrfromemp);
1

---循环 loop (相当于do while)

  1. selectenamefromempwhereempnoin(selectdistinctmgrfromemp);
2

--- 异常处理

  1. selectenamefromempwhereempnoin(selectdistinctmgrfromemp);
3

---记录数据库错误信息的errorlog

  1. selectenamefromempwhereempnoin(selectdistinctmgrfromemp);
4

---游标

  1. selectenamefromempwhereempnoin(selectdistinctmgrfromemp);
5

---带参数的游标

  1. selectenamefromempwhereempnoin(selectdistinctmgrfromemp);
6

---课更新的游标

  1. selectenamefromempwhereempnoin(selectdistinctmgrfromemp);
7

----创建存储过程

  1. selectenamefromempwhereempnoin(selectdistinctmgrfromemp);
8

---带参数的存储过程

  1. selectenamefromempwhereempnoin(selectdistinctmgrfromemp);
9

---函数

  1. selectsalfromempwheresalnotin
  2. (selectdistincte1.salfromempe1joinempe2on(e1.sal<e2.sal));
0

----触发器

  1. selectsalfromempwheresalnotin
  2. (selectdistincte1.salfromempe1joinempe2on(e1.sal<e2.sal));
1

---更改有依赖关系的表的字段值的建立的一个触发器

  1. selectsalfromempwheresalnotin
  2. (selectdistincte1.salfromempe1joinempe2on(e1.sal<e2.sal));
2

---树状结构的存储与展示

  1. selectsalfromempwheresalnotin
  2. (selectdistincte1.salfromempe1joinempe2on(e1.sal<e2.sal));
3

---用存储过程展示树状结构(用递归的方式实现)

  1. selectsalfromempwheresalnotin
  2. (selectdistincte1.salfromempe1joinempe2on(e1.sal<e2.sal));
4

【编辑推荐】

  1. Oracle 数据集成的实际解决方案
  2. 对Oracle Raw常见类型的解释
  3. Oracle归档模式的相关切换的实际操作步骤
  4. Oracle数据库的启用与关闭的归档模式
  5. Oracle修改字段类型2种方案介绍
转载请说明出处
知优网 » 细数你应该修炼的Oracle基本功

发表评论

您需要后才能发表评论