Oracle的sql语句练习题与标准答案_第1页
Oracle的sql语句练习题与标准答案_第2页
Oracle的sql语句练习题与标准答案_第3页
Oracle的sql语句练习题与标准答案_第4页
Oracle的sql语句练习题与标准答案_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Oracle的sql语句练习题含答案(二)Oracle_SQL练习题11.选择部门30中的所有职员.2.列出所有办事员(CLERK)的姓名,编号和部门编号.3.找出佣金高于薪金的职员.4.找出佣金高于薪金的60%的职员.5.找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料.6.找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),既不是经理又不是办事员但其薪金大于或等于2000的所有职员的详细资料.7.找出收取佣金的职员的不同工作.8.找出不收取佣金或收取的佣金低于100的职员.9.找出各月倒数第3天受雇的所有职员.10.找出早于1

2、2年前受雇的职员.11.以首字母大写的方式显示所有职员的姓名.12.显示正好为5个字符的职员的姓名.13.显示不带有R的职员的姓名.14.显示所有职员姓名的前三个字符.15.显示所有职员的姓名,用a替换所有A16.显示满10年服务年限的职员的姓名和受雇日期.17.显示职员的详细资料,按姓名排序.18.显示职员的姓名和受雇日期,依照其服务年限,将最老的职员排在最前面.19.显示所有职员的姓名、工作和薪金,按工作的降序排序,若工作相同则按薪金排序.20.显示所有职员的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同则将最早年份的职员排在最前面.21.显示在一个月为30天的情况所有职员的

3、日薪金,忽略余数.22.找出在(任何年份的)2月受聘的所有职员。23.关于每个职员,显示其加入公司的天数.24.显示姓名字段的任何位置包含A的所有职员的姓名.25.以年月日的方式显示所有职员的服务年限. 答案:1.select ename,job,mgr,hiredate,sal,comm ,deptno from emp where deptno=30;2.select ename,empno,deptno from emp where job=CLERK;3.select * from emp where commsal;4.select *from empwhere commsal*0.

4、6;5.select empno ,ename, job,hiredate,sal,comm,deptnofrom empwhere( job=MANAGER and deptno=10)or( job=CLERK and deptno=20);6.select empno,ename,job, hiredate,sal, deptnofrom empwhere ( job=MANAGER and deptno=10)or( job=CLERK and deptno=20)or(job MANAGER and jobCLERK) and sal=2000);7.select distinct

5、ename,job,commfrom empwhere NVL(comm,0)0;注意假如像上面如此写,就 job ename comm 3个同时不同的都列出来正确的是:select distinct jobfrom empwhere NVL(comm,0)0;8.select ename,comm. from emp where NVL(comm,0)=0 or NVL(comm,0)100;假如按上面的写法就重复了,直接能够写成select ename,commfrom empwhere NVL(comm,0)1211.select initcap(ename) name ,job, hi

6、redatefrom emp;12. select ename,job,hiredate from emp where length(ename)=5;13 select ename, job from emp where ename not like %R%;14.select substr(ename, 1,3) name,job,hiredate from emp;15select replace(ename, A,a) name,job,hiredate from emp;16select ename, job, hiredate from empwhere months_betwee

7、n(sysdate,hiredate)/12=10;17. select * from emp order by ename;18.select ename, hiredate from emp order by hiredate desc;19.select ename,job, sal from emp order by job desc, sal asc;20.select ename, to_char(hiredate,yyyy) year, to_char(hiredate,mm) monthsfrom emporder by months, year asc;21.select e

8、name, sal/30 dailysalfrom emp;22. select ename, hiredatefrom empwhere to_char(hiredate,mm)=02;23. select ename,sysdate-hiredate 天数 from emp;24.select ename from emp where instr(ename,A,1)0;25. select ename, to_char(hiredate,yyyy/mm/dd) from emp;-26.列出至少有一个职员的所有部门. selectdnamefromemp,deptwhereemp.dep

9、tno=dept.deptnogroupbydname; selectdistinctdnamefromemp,deptwhereemp.deptno=dept.deptno; -讲明:(1)select中出现的字段一定要出现在groupby中; -(2)假如select中出现的字段不出现在groupby中,则一定要出现在select的聚合函数中,关于想出现的字段,可用max()或min()。 -(3)默认的情况是按groupby中的字段来排序,假如要用orderby来自己排序,则orderby后的字段一定是groupby后的字段,不能是聚合函数的字段 -27.列出薪金比“SMITH”多的所有

10、职员. selectename,salfromempwheresal(selectsalfromempwhereupper(ename)=SMITH); -28.列出所有职员的姓名及其直接上级的姓名. selecta.ename,b.enamemgrnamefromempa,empbwherea.mgr=b.empno; -29.列出受雇日期早于其直接上级的所有职员 selecte.ename,m.enamefromempe,empmwheree.mgr=m.empnoand(e.hiredate1500; -33.列出在部门“SALES”(销售部)工作的职员的姓名,假定不明白销售部的部门编号

11、 selectenamefromemp,deptwhereemp.deptno=dept.deptnoanddname=SALES; -34.列出薪金高于公司平均薪金的所有职员 selectename,salfromempwheresal(selectavg(sal)fromemp); -35.列出与“SCOTT”从事相同工作的所有职员 -SCOTT从事一种工作 selectenamefromempwherejob=(selectjobfromempwhereupper(ename)=SCOTT); -SCOTT从事多种工作 selectename,jobfromempwherejobin(s

12、electjobfromempwhereupper(ename)=SCOTT); -36.列出薪金等于部门30中职员的薪金的所有职员的姓名和薪金 selectename,salfromempwheresalin(selectsalfromempwheredeptno=30); -37.列出薪金高于在部门30工作的所有职员的薪金的职员姓名和薪金 selectename,salfromempwheresal(selectmax(sal)fromempwheredeptno=30); -38.列出在每个部门工作的职员数量、平均工资和平均服务期限 selectdeptno部门号,count(ename

13、)职员数量,avg(sal+nvl(comm,0)平均工资,trunc(avg(sysdate-hiredate)平均服务期限(天)fromempgroupbydeptno; -39.列出所有职员的姓名、部门名称和工资 selectename,dname,sal+nvl(comm,0)fromemp,deptwhereemp.deptno=dept.deptno; -40.列出从事同一种工作但属于不同部门的职员的一种组合 selectdistincte.deptno,e.jobfromempe,empmwheree.deptno!=m.deptnoande.job=m.joborderbye.

14、job; -41.列出所有部门的详细信息和部门人数 selectdept.*,(selectcount(ename)fromempwhereemp.deptno(+)=dept.deptno)人数fromdept; -42.列出各种工作的最低工资 selectjob,min(sal+nvl(comm,0)最低工资fromempgroupbyjob; -43.列出各个部门的MANAGER(经理)的最低薪金 selectmin(sal+nvl(comm,0)fromempwhereupper(job)=MANAGERgroupbydeptno; -显示部门名称 selectdname,min(sa

15、l+nvl(comm,0)fromemp,deptwhereemp.deptno=dept.deptnoandupper(job)=MANAGERgroupbydname; -44.列出所有职员的年工资,按年薪从低到高排序 selectename,to_char(sal+nvl(comm,0)*12,9999,9999.00)年工资fromemporderby2; -45.显示各部门职员薪金最高的前2名 select*from(selectename,deptno,sal,row_number()over(partitionbydeptnoorderbysaldesc)rfromemp)whe

16、rer=2-46.显示薪金最高的3位职员 select*from(selectename,sal,dense_rank()over(orderbysaldesc)rfromemp)wherer(selectavg(sal)fromemppwheree.deptno=p.deptno); -52.给所有10部门的经理(MANAGER)和20部门的职员(CLERK),增加薪金10%。 updateempsetsal=sal*(1+0.1)where(deptno=10andupper(job)=MANAGER)or(deptno=20andupper(job)=CLERK); -53.删除DEPT

17、中没有职员的部门。 deletefromdeptwheredeptnonotin(selectdistinctdeptnofromemp); -54.删除雇佣年限低于20年的职员。 deletefromempwheretrunc(sysdate-hiredate)2850;4. 查询工资不在1500到2850之间的所有雇员姓名和工资。 select ename, sal from emp where sal not between 1500 and 2850;5. 查询10号部门和30号部门工资超过1500的雇员姓名和工资。 select ename, sal from emp where s

18、al (select avg(sal) from emp);19. 查询工资、奖金与SCOTT完全相同的所有职员的姓名、工资和奖金。 select ename,sal, comm from emp where (sal,nvl(comm,-1) in (select sal,nvl(comm,-1) from emp where ename=SCOTT) ;20. 查询81年入职的职员 select * from emp where to_char(hiredate, yy)= 81;21. 按年月日查询职员信息 select to_char(hiredate, yyyy-mm-dd )fro

19、m emp;22. 向DEPT表中插入一条数据,要求:部门号为50,部门名称为ADMINISTRATOR,部门位置为BOSTON。 Insert into dept values(50, ADMINISTRATOR,BOSTON);23. 向EMP表中插入一条数据,要求:职员号为2000,姓名为JOHN,工资为1000,入职时刻为2003年4月7日,部门号为30号。 Insert into emp (empno,ename,sal,hiredate,deptno) values(2000, JOHN,1000, 07-4月-03,30);24. 给10号部门的每个雇员增加10%的工资。然后提交

20、事务。 Update emp set sal=sal*1.1 where deptno=10; commit25. 删除50号部门。然后回滚事务。 Delete from dept where deptno=50; Rollback;新建一张学员信息表(student),要求:1. 字段如下:学号(sid),姓名(name),性不(sex),年龄(age),地址(address)2. 分不为字段添加约束:学号为主键,姓名为非空,性不为检查约束,年龄为检查约束,地址为默认约束3. 为表建立自增值(sid), 建议初始值从为 1001, 增量为 1. 4. 插入记录新建一张课程表(course),要求:1. 字段如下:课程编号(cid),课程名称(subject)2. 分不为字段添加约束:课程编号为主键,课程名称为非空3. 为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论