知识大全 ORACLE查询练习

Posted 员工

篇首语:采得百花成蜜后,为谁辛苦为谁甜。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ORACLE查询练习相关的知识,希望对你有一定的参考价值。

ORACLE查询练习  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  emp 员工表(empno 员工号/ename 员工姓名/job 工作/mgr 上级编号/hiredate 受雇日期/sal 薪金/m 佣金/deptno 部门编号)

  dept 部门表(deptno 部门编号/dname 部门名称/loc 地点)

  工资= 薪金+ 佣金

   .列出至少有一个员工的所有部门

   .列出薪金比 SMITH 多的所有员工

   .列出所有员工的姓名及其直接上级的姓名

   .列出受雇日期早于其直接上级的所有员工

   .列出部门名称和这些部门的员工信息 同时列出那些没有员工的部门

   .列出所有 CLERK (办事员)的姓名及其部门名称

   .列出最低薪金大于 的各种工作

   .列出在部门 SALES (销售部)工作的员工的姓名 假定不知道销售部的部门编号

   .列出薪金高于公司平均薪金的所有员工

   .列出与 SCOTT 从事相同工作的所有员工

   .列出薪金等于部门 中员工的薪金的所有员工的姓名和薪金

   .列出薪金高于在部门 工作的所有员工的薪金的员工姓名和薪金

   .列出在每个部门工作的员工数量 平均工资和平均服务期限

   .列出所有员工的姓名 部门名称和工资

   .列出所有部门的详细信息和部门人数

   .列出各种工作的最低工资

   .列出各个部门的MANAGER(经理)的最低薪金

   .列出所有员工的年工资 按年薪从低到高排序

  

  select dname from dept where deptno in(

  select deptno from emp);

  

  select * from emp where sal>(

  select sal from emp where ename= SMITH );

  

  select a ename (

  select ename from emp b where b empno=a mgr) as bossname from emp a;

  

  select a ename from emp a where a hiredate<(

  select hiredate from emp b where b empno=a mgr);

  

  select a dname b empno b ename b job b mgr b hiredate b sal m b deptno

  from dept a left join emp b on a deptno=b deptno;

  

  select a ename b dname from emp a join dept b

  on a deptno=b deptno and a job= CLERK ;

  

  select distinct job as HighSalJob from emp group by job having min(sal)> ;

  

  select ename from emp where deptno=(

  select deptno from dept where dname= SALES );

  

  select ename from emp where sal>(

  select avg(sal) from emp);

  

  select ename from emp where job=(

  select job from emp where ename= SCOTT );

  

  select a ename a sal from emp a where a sal in (

  select b sal from emp b where b deptno= ) and a deptno<> ;

  

  select ename sal from emp where sal>(

  select max(sal) from emp where deptno= );

  

  select

  (select b dname from dept b where a deptno=b deptno) as deptname

  count(deptno) as deptcount

  avg(sal) as deptavgsal

  from emp a group by deptno;

  

  select

  a ename

  (select b dname from dept b where b deptno=a deptno) as deptname

  sal

  from emp a;

  

  select

  a deptno

  a dname

  a loc

  (select count(deptno) from emp b where b deptno=a deptno group by b deptno) as deptcount

  from dept a;

  

  select job avg(sal) from emp group by job;

  

  select deptno min(sal) from emp where job= MANAGER group by deptno;

  

  select ename (sal+nvl(m ))* as salpersal from emp order by salpersal;

  ORACLE 子句查询 分组等

  A 同表子查询作为条件

  a 给出人口多于Russia(俄国)的国家名称SELECT name FROM bbc

  WHERE population>

  (SELECT population FROM bbc

  WHERE name= Russia )

  b 给出 India (印度) Iran (伊朗)所在地区的所有国家的所有信息SELECT * FROM bbc

  WHERE region IN

  (SELECT region FROM bbc

  WHERE name IN ( India Iran ))

  c 给出人均GDP 超过 United Kingdom (英国)的欧洲国家 SELECT name FROM bbc

  WHERE region= Europe AND gdp/population >

  (SELECT gdp/population FROM bbc

  WHERE name= United Kingdom )

  d 这个查询实际上等同于以下这个:

  select e ename from emp e (select empno from emp where ename = KING ) e whe

  re e mgr = e empno;

  你可以用EXISTS 写同样的查询 你只要把外部查询一栏移到一个像下面这样的子查询环境中就可以了

  select ename from emp e

  where exists (select from emp where e mgr = empno and ename = KING );

  当你在一个WHERE 子句中写EXISTS 时 又等于向最优化传达了这样一条信息 即你想让外部查询先运行 使用每一个值来从内部查询(假定 EXISTS=由外而内)中得到一个值

  B 异表子查询作为条件

  a select * from studentExam where studentid=( select studentid from student where name= 吴丽丽 );

  b select * from studentexam where studentid in (select studentid from student) order by studentid;

  c select * from student where studentid in (select studentid from studentexam where mark> );

   select studentexam mark studentexam studentid as seid student studentid student name from studentexam student where student studentid=studentexam studentid;

  过滤分组:

  顺序为先分组 再过滤 最后进行统计(实际值)

  select studentid count(*) as highpasses from studentexamwhere mark> group by studentid;

  假使我们不想通过数据表中的实际值 而是通过聚合函数的结果来过过滤查询的结果

  select studentid avg(mark) as averagemarkfrom studentexamwhere avg(mark)< oravg(mark)> group by studentid;(此句错误 where 句子是不能用聚合函数作条件的)此时要用having

  select studentid avg(mark) from studentexam group by studentid having avg(mark)> or avg(mark)< ;

  select studentid avg(mark) from studentexam where studentid in( )group by

  studentid having avg(mark)> ;(先分组 再过滤 再having 聚合 最后再统计)

  select studentid avg(mark) as averagemarkfrom studentexamwhere examid in( )group by studentidhaving avg(mark)< or avg(mark)> ;

  返回限定行数查询:

  select name from student where rownum<= ;

  oracle 中使用rownum 关键字指定 但该关键字必须在where 子句中与一个比较运算符一起指定 而不能与order by 一起配合便用 因为rownum 维护的是原始行号 如果需要用group

  by\\order by 就用子句查询作表使用的方法:

  select studentid averagemark from(select studentid avg(mark) as averagemarkfrom

cha138/Article/program/Oracle/201311/18907

相关参考

知识大全 Oracle的sql语句练习题含答案(1)

Oracle的sql语句练习题含答案(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  选择部

知识大全 Oracle查询表、视图、序列等信息查询

Oracle查询表、视图、序列等信息查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这几天做

知识大全 oracle多表查询与子查询

  (一)子查询select*fromtableA  whereidoperator(select*fromtableAawhereaid=)  operaor  单条记录子查询(

知识大全 oracle笔记之简单查询、限定查询和排序

  别名  oracle别名如果别名包含空格特殊字符(如#$)或需区分大小写(Name)需要用双引号把别名引起来  selectenameName  sal*AnnualSalary  fromemp

知识大全 Oracle树查询及相关函数

Oracle树查询及相关函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracle树查询的

知识大全 oracle树形结构实行查询

  ORACLE提供了一种树形结构用来实现层次查询  STARTWITH指定查询的根行  CONNECTBY指定父行和子行的关系  PRIOR引用父行  为测试方便使用如下Demo  建立数据库表Tr

知识大全 oracle对表的基本操作

  子查询目标  子查询是一种把查询的结果作为参数返回给另一个查询的一种查询  子查询可以让你将多个查询绑定在一起  嵌套子查询  多层子查询  相关子查询  可接受外部的引用  exists/any

知识大全 oracle常用经典SQL查询

oracle常用经典SQL查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  常用SQL查询  

知识大全 Oracle用户权限查询

Oracle用户权限查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  查看所有用户  sele

知识大全 ORACLE查询树型关系

ORACLE查询树型关系  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  oracle中的sele