Oracle第二章习题及答案.docx_第1页
Oracle第二章习题及答案.docx_第2页
Oracle第二章习题及答案.docx_第3页
Oracle第二章习题及答案.docx_第4页
Oracle第二章习题及答案.docx_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

一、基于自己创建表的操作1:创建一张学生表student,拥有stuid,stuname,sex,三个字段,其中stuid为主键。create table student( stuid int primary key, stuname VARCHAR(20), sex VARCHAR(20)2:为该表增加一个新列score。alter table student add(score varchar(10);3:修改该表score列名为stuscore。alter table student rename column score to stuscoree;4:为student表插入5条记录。insert into student values(1,张三丰,男,80);insert into student values(2,阿悄,女,70);insert into student values(3,陈龙,男,90);insert into student values(4,章子怡,女,50);insert into student values(5,张卫健,男,60);5:查询student表中的全部数据,其中列名为中文。select STUID as 学号,STUNAME as 姓名 ,SEX as 性别,STUSCOREE as 分数 from student;6:查询学生姓名和分数,并是查询结果按照学生成绩降序排列。select STUNAME,STUSCOREE from student order by STUSCOREE desc;7:修改所有性别为“男”的学生信息为性别为“male”。update student set SEX=male where SEX=男;8:删除所有记录。delete from student;9:删除student表。drop table student;二、基于emp表的操作1:创建一张新表emp1,和emp表结构和记录完全一样。 create table emp1 as select*from Scott.Emp;基于emp1表的操作:1:选择部门30中的雇员。select*from emp1 where DEPTNO=30 and JOB=CLERK;2:列出所有办事员(CLERK)的姓名、编号和部门。select ENAME,EMPNO,DEPTNO from emp1 where JOB=CLERK;3:找出佣金高(comm)于薪金的雇员。 select*from emp1 where COMM SAL and JOB=CLERK;4:找出佣金高于薪金60%的雇员。select*from emp1 where COMM*0.6 SAL and JOB=CLERK;5:找出部门10中所有经理和部门20中所有办事员的详细资料。select*from emp1 where DEPTNO=10 and JOB=MANAGER union select*from emp1 where JOB=SALESMAN;6:找出部门10中所有经理和部门20中所有办事员以及既不是经理又不是办事员但其薪金大于或等于2000的所有雇员的详细资料。select*from emp1 where DEPTNO=10 and JOB=MANAGER union select*from emp1 where JOB=SALESMAN union select*from emp1 where JOB in(CLERK) and SAL=2000;7:找出收取佣金的雇员的不同工作。 select distinct JOB from emp1 where job=CLERK;8:找出不收取佣金或收取佣金低于100的雇员。select *from emp1 where COMM is null or nvl(COMM,0)12;3:显示只有首字母大写的所有雇员的姓名 select UPPER( SUBSTR(ename,1,1) |LOWER(SUBSTR(ename,2,LENGTH(ename)-1) FROM emp where JOB=CLERK;4:显示正好为15个字符的雇员姓名select deptno,ename from emp where length(ename)=15 and JOB=CLERK;5:显示不带有R的雇员姓名 select ename from emp where ename not like %R%and JOB=CLERK;6:显示所有雇员的姓名的前3个字符select substr(ename,1,3) from emp where JOB=CLERK;7:显示所有雇员的姓名,用a替换所有的Aselect replace(ename,A,a) from emp;8:显示所有雇员的姓名以及满10年服务年限的日期select ename,hiredate,add_months(hiredate,10*12) from emp;9:显示雇员的详细资料,按姓名排序select * from emp order by ename;10:显示雇员姓名,根据其服务年限,将最老的雇员排在最前面select empno,ename,job,mgr,hiredate,sal ,comm,deptno ,(sysdate-hiredate)/365 from emp order by (sysdate-hiredate)/365 desc;11:显示所有雇员的姓名、工作和薪金,按工作内的工作的降序顺序排序,而工作按薪金排序select ename,job,sal from emp order by job desc,sal asc;12:显示所有雇员的姓名和加入公司的年份和月份,按雇员受雇日所在月排序,并将最早年份的项目排在最前面select ename,to_char(hiredate,YYYY) year1,to_char(hiredate,MON) month1 from emp order by year1 asc,month1;13:显示在一个月为30天的情况下所有雇员的日薪金,忽略小数select round(sal/30,0) as daypay from emp;14:找出在(任何年份的)2月份受雇的所有雇员select * from emp where hiredate like %-2月%;15:对于每个雇员,显示其加入公司的天数 select round(sysdate-hiredate) from emp;16:显示姓名字段的任何位置,包含A的所有雇员的姓名select ename from emp where ename like %A%;17:以年、月和日显示所有雇员的服务年限select ename,to_number(to_char(sysdate,YYYY)-to_number(to_char(hiredate,YYYY)-1,to_number(to_char(sysdate,mm)-to_number(to_char(hiredate,mm) +10,to_number(to_char(sysdate,dd)-to_number(to_char(hiredate,dd)+30 from emp;18: 列出至少有一个雇员的所有部门 select deptno from emp group by deptno having count(deptno)0;19:列出薪金比“SMITH”多的所有雇员SELECT ename,sal, deptno FROM emp WHERE sal(SELECT sal FROM emp WHERE ename=SMITH);20:列出所有雇员的姓名及其部门名select ENAME,DEPTNO from emp where JOB=CLERK; 21:列出所有入职日期早于其直接上级的所有雇员SELECT e.ename as 职工, m.ename as 经理 FROM emp e left join emp m on (e.mgr=m.empno) where e.hiredate1500;23:列出薪金高于公司平均水平的所有雇员select ename, deptno from emp where sal(select avg(sal) from emp);24:列出与“SCOTT”从事相同工作的所有雇员 select deptno,ename from emp where job=(select job from emp where ename=SCOTT);25:列出薪金高于在部门30工作的所有雇员的薪金SELECT ename,sal from emp where sal all(select sal from emp where deptno=30);26:列出薪金高于在部门30工作的最高的薪金SELECT ename,sal from emp where salall(select max(sal) from emp where deptno=30);27:列出每个部门雇员的数量select deptno,count(*) from emp group by deptno;28:列出所有雇员的名称,部门名称和薪金select ENAME,DEPTNO,SAL from emp where JOB=CLERK;29:列出从事同一种工作但不属于同一部门的这些员工select job,deptno from emp group by job,deptno;30:列出个类别工作的最低工资select job,min(sal) from emp group by job;31:列出各个部门的经理的最低薪金 select DEPTNO,min(sal) from emp where job=MANAGER group by DEPTNO;32:列出按计算的字段排序的所有雇员的年薪select ename,(sal+nvl(comm,0)*12 as yearpay from emp order by yearpay desc;33:列出所有CLERK的姓名及其部门名称select ENAME,DEPTNO from ep where JOB=CLERK;34:列出薪金水平处于前四位的雇员select sal,ename from emp order by sal desc;35:求出所有员工入职了多少年零多少月零多少天select empno,ename,to_char(floor(to_number(sysdate-hiredate)/365)| years |to_char(ceil(months_between(sysdate,hiredate)-(floor(to_number(sysdate-hiredate)/365)*12)| months from emp;作业要求:将SQL语句复制粘贴在相对应的题目下面。1:找出各月最后一天受雇的所有雇员select * from emp where hiredate=last_day(hiredate);2:找出早于12年之前受雇的雇员select * from emp where to_number(to_char(sysdate,yyyy)-to_number(to_char(hiredate,yyyy)12;3:显示只有首字母大写的所有雇员的姓名SELECT initcap(ename) FROM emp;SELECT ename from emp where ename=initcap(ename);4:显示正好为15个字符的雇员姓名 select ENAME from emp where length(ENAME)=15;5:显示不带有R的雇员姓名select ENAME from emp where ENAME not like %R%;6:显示所有雇员的姓名的前3个字符select substr(ENAME,0,3) from emp;7:显示所有雇员的姓名,用a替换所有的Aselect replace(ENAME,A,a) from emp;8:显示所有雇员的姓名以及满10年服务年限的日期select ename, add_months(hiredate,120) from emp;9:显示雇员的详细资料,按姓名排序select * from emp order by ename;10:显示雇员姓名,根据其服务年限,将最老的雇员排在最前面 select ename from emp order by hiredate;11:显示所有雇员的姓名、工作和薪金,按工作内的工作的降序顺序排序,而工作按薪金排序select ename,job,sal from emp order by job desc, sal desc;12:显示所有雇员的姓名和加入公司的年份和月份,按雇员受雇日所在月排序,并将最早年份的项目排在最前面select ename, to_char(hiredate, yyyy-mm) as 加入年月 from emp order by to_char(hiredate,mm) asc, to_char(hiredate,yyyy) asc;13:显示在一个月为30天的情况下所有雇员的日薪金,忽略小数select round(sal/30,0) from emp;14:找出在(任何年份的)2月份受雇的所有雇员select * from emp where to_char(hiredate, mm)=02;15:对于每个雇员,显示其加入公司的天数select ename,round(sysdate-hiredate,0) 加入公司天数 from emp;16:显示姓名字段的任何位置,包含A的所有雇员的姓名select ename from emp where ename like %A%;17:以年、月和日显示所有雇员的服务年限select ename,hiredate,trunc(months_between(sysdate,hiredate)/12) 年,trunc(mod(months_between(sysdate,hiredate),12) 月, trunc(sysdate-add_months(hiredate,months_between(sysdate,hiredate) 日 from emp;18: 列出至少有一个雇员的所有部门select deptno,count(0) from emp group by deptno having count(0)=119:列出薪金比“SMITH”多的所有雇员 select ename from emp where sal (select sal from emp where ename = SMITH);select e2.* from emp e1, emp e2 where e1.ename=SMITHand e2.sale1.sal;20:列出所有雇员的姓名及其部门名select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno;select e.ename,d.dname from emp e join dept d on e.deptno=d.deptno;21:列出所有入职日期早于其直接上级的所有雇员select * from emp e1 where hiredate1500;23:列出薪金高于公司平均水平的所有雇员select * from emp where sal(select avg(sal) from emp);24:列出与“SCOTT”从事相同工作的所有雇员select * from emp where job=(select job from emp where ename=SCOTT);25:列出薪金高于在部门30工作的所有雇员的薪金select ename, sal from emp where sal(select max(sal) from emp where deptno=30);select ename, sal from emp where salall(select sal from emp where deptno=30);26:列出薪金高于在部门30工作的最高的薪金select ename, sal from emp where sal(select max(sal) from emp where deptno=30);27:列出每个部门雇员的数量select d.*, (select count(deptno) from emp e where e.deptno=d.deptno) 雇员人数 from dept d;28:列出所有雇员的名称,部门名称和薪金select ename,(select dname from dept d where d.deptno=e.deptno) 部门名称,sal from emp e;select e.ename,d.dname,sal from emp e,dept d where e.deptno=d.deptno;29:列出从事同一种工作但不属于同一部

温馨提示

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

评论

0/150

提交评论