Oracle的sql语句上级练习和答案(二)

--1、列出至少有一个雇员的所有部门

select distinct dname from dept where deptno in (select distinct deptno from emp);

  --2、列出薪金比"SMITH"多的所有雇员

select ename,sal from emp where sal>(select sal from emp where ename=upper(‘smith‘));

  --3、列出所有雇员的姓名及其直接上级的姓名

  select e.ename,m.ename from emp e,emp m where e.mgr=m.empno(+);

  --4、列出入职日期早于其直接上级的所有雇员

  select ename from emp e where hiredate<(select hiredate from emp where empno=e.mgr);

  --5、列出部门名称和这些部门的雇员,同时列出那些没有雇员的部门

  select dname,ename from dept d left join emp e on d.deptno=e.deptno;

  --6、列出所有“CLERK”(办事员)的姓名及其部门名称

  select ename,dname from emp e left join dept d on e.deptno=d.deptno where job=upper(‘clerk‘);

  --7、列出各种工作类别的最低薪金,显示最低薪金大于1500的记录

  select job,min(sal) from emp group by job having min(sal)>1500;

  --8、列出从事“SALES”(销售)工作的雇员的姓名,假定不知道销售部的部门编号

  select ename from emp where deptno = (select deptno from dept where dname=uppder(‘SALES‘))

  --9、列出薪金高于公司平均水平的所有雇员

  select ename from emp where sal>(select avg(sal) from emp);

  --10、列出与“SCOTT”从事相同工作的所有雇员

  select ename from emp where job=(select job from emp where ename=upper(‘scott‘));

  --11、列出某些雇员的姓名和薪金,条件是他们的薪金等于部门30中任何一个雇员的薪金

  select ename,sal from emp where sal in (select sal from emp where deptno=30);

  --12、列出某些雇员的姓名和薪金,条件是他们的薪金高于部门30中所有雇员的薪金

  select ename ,sal from emp where sal>(select max(sal) from emp where deptno=30);

  --13、列出每个部门的信息以及该部门中雇员的数量

  select d.deptno,dname,count(ename) from dept d left join emp e on (d.deptno=e.deptno)

  group by d.deptno,dname

  --14、列出所有雇员的雇员名称、部门名称和薪金

  Select e.ename,d.dname,e.sal from emp e left join dept d on (d.deptno=e.deptno)

  --15、列出从事同一种工作但属于不同部门的雇员的不同组合

  Select tba.ename,tbb.ename,tba.job,tbb.job,tba.deptno,tba.deptno

  From emp tba,emp tbb

  Where tba.job=tbb.job and tba.deptno<>tbb.deptno

  --16、列出分配有雇员数量的所有部门的详细信息,即使是分配有0个雇员

  Select dept.deptno,dname,loc,count(empno)

  From dept,emp

  Where dept.deptno=emp.deptno(+)

  Group by dept.deptno,dname,loc

  --17、列出各种类别工作的最低工资

  Select min(sal) from emp group by job

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

  Select deptno,min(sal) from emp where job=upper(‘manager’) group by deptno

  --19、列出按年薪排序的所有雇员的年薪

  select (sal+nvl(comm,0))*12 as avn from emp order by avn

  --20、列出薪金水平处于第四位的雇员

  Select * from (Select ename,sal, rank() over (order by sal desc) as grade from emp) where grade=4

时间: 2024-10-09 15:18:10

Oracle的sql语句上级练习和答案(二)的相关文章

Oracle的sql语句上机练习和答案(一)

--1.选择部门30中的雇员 select * from empwhere deptno=30; --2.列出所有办事员的姓名.编号和部门 selectename,empno,dname from emp e inner join dept d on e.deptno = d.deptno wherejob=upper('clerk'); --3.找出佣金高于薪金的雇员 select* from emp where comm>sal; --4.找出佣金高于薪金60%的雇员 select* fro

Oracle 动态SQL语句

Oracle 动态SQL语句 (2012-06-18 16:36:12) 转载▼ 标签: oracle it   EXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQLpackage包. 它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,EXECUTEIMMEDIATE的目标在于减小企业费用并获得较高的性能,较之以前它相当容易编码.尽管DBMS_SQL仍然可用,但是推荐使用EXECUTEIMMEDIATE,因为它获的收益在包

Oracle之sql语句优化

项目中虽然使用了orm映射,但Oracle系统的优化还是很有价值的,这里从sql语句的角度对常用的语句做下总结. 1.from字段中的优化: Oracle安照从右到左的顺序加载表数据,应该把可以排除数据最多的表放到后面(基础表). 比如,在关联查询中,把课程表放到后面,成绩表放到前面,因为课程表数据一般比较少,关联的时候可以快速的过滤掉一些成绩数据. 2.where中的优化: 对可以过滤数据最多的,放到后面,原理也是Oracle执行从下到上(从右到左)的顺序. 3.使用列名替代*: 省去从字典表

oracle常用SQL语句(汇总版)

Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象 一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……); INSERT INTO 表名(字段名1, 字段名2, ……) SELECT (字段名1, 字段名2, ……) FROM 另外的表名; 字符串类型的字段值必须用单引号括起来, 例如: ’GOOD DAY’ 如果字段值里包含单引号’ 需要

ORACLE基本SQL语句-查询篇

一.普通查询 /*查询表数据*/select * from STU /*取出前3行数据*/select * from stu where ROWNUM<=3 /*模糊查询*/select * from stu where stu_id like 'stu001%' 说明:通配符“%”代表一个或者多个字符,通配符“_”代表一个字符. /*别名*/select STU_ID as 学号 from stu 二.联合查询/*普通联合查询*/SELECT STU.STU_NAME, STU.STU_AGE

ORACLE基本SQL语句-用户及建表篇

一.用户相关SQL语句 /*新建用户*/create user SA identified by 2013; 说明:SA用户名,2013密码 /*授权connect,resource给用户sa*/grant connect,resource to sa; 说明:CONNECT角色: --是授予最终用户的典型权利,最基本的 . ESOURCE 角色: --是授予开发人员的 /*查询所有的用户*/select * from all_users; /*将表STU查询权限授予SA*/GRANT SELE

ORACLE基本SQL语句-添加更新数据函数篇

一.添加数据 /*添加数据*/insert into STU values('stu0004','赵一',18,1,"kc0004");insert into STU(STU_ID,STU_NAME,STU_AGE,STU_SET ) values('stu0013','储十一',19,1); 说明:如果不指定将数据添加到那个字段,那么此时必须列出全部数据,如果列出字段,则一一对应,必须列出约束不为空的所有字段,否则报错. 二.更新数据 /*更新数据*/update STU SET S

ORACLE 中 SQL语句优化

(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效):  ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表.    (2) WHERE子句中的连接顺序.:  ORACLE采用自下而上的顺序解

ORACLE数据库SQL语句的执行过程

首先是最简单链接数据库的过程,JDBC标准的链接的过程: 1. 载入JDBC驱动程序,一般来说载入驱动程序,采用的都是利用Class.forName()反射来加载驱动 Oracle: Class.forName("oracle.jdbc.driver.OracleDriver"); SQLServer: Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); MySql: Class.forNam