收藏 分享(赏)

Oracle面试题.doc

上传人:HR专家 文档编号:11402287 上传时间:2020-04-16 格式:DOC 页数:18 大小:39KB
下载 相关 举报
Oracle面试题.doc_第1页
第1页 / 共18页
Oracle面试题.doc_第2页
第2页 / 共18页
Oracle面试题.doc_第3页
第3页 / 共18页
Oracle面试题.doc_第4页
第4页 / 共18页
Oracle面试题.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

1、连接用户:超级用户:conn sys 用户名/密码 as sysdba普通用户:conn system 用户名/密码创建表空间:CREATE TABLESPACE epet_tablespaceDATAFILE E:appAdministratororadataorcltest.DBFSIZE 100Mautoextend on next 32m maxsize 2048m 删除表空间、对象及数据文件:drop tablespace study including contents and datafiles;为表空间创建用户CREATE USER userIDENTIFIED BY pass

2、wordDEFAULT TABLESPACE tablespaceCONNECT:临时用户RESOURCE:更为可靠和正式的用户DBA:数据库管理员角色,拥有管理数据库的最高权限#分配权限或角色GRANT privileges or role TO user;#撤销权限或角色REVOKE privileges or role FROM user;CONNECT角色: -是授予最终用户的典型权利,最基本的 CREATE SESSION -建立会话 RESOURCE 角色: -是授予开发人员的 CREATE CLUSTER -建立聚簇 CREATE PROCEDURE -建立过程 CREATE S

3、EQUENCE -建立序列 CREATE TABLE -建表 CREATE TRIGGER -建立触发器 CREATE TYPE -建立类型 数据查询语言(DQL:Data Query Language)用于检索数据库表中存储的行。可以使用SQL的SELECT语句编写查询语句。数据操作语言(DML:Data Manipulation Language)用于修改表的内容。DML语句有三种,分别为Insert,Update,Delete。事务控制语言(TCL: Transaction Control Language)用于将对行所作的修改永久性的存储到表中,或者取消这些修改操作。TC语句共有3种:

4、Commit 永久性的保存对行所作的修改。Rollback 取消对行所作的修改。SavePoint 设置一个“保存点”,可以将对行所作的修改回滚到此处。数据定义语言(DDL: Data Definition Language)用于定义构成数据库的数据结构,例如表。DDL语句有5种基本类型:分别为Create 创建数据库结构。Alter 修改数据库结构。Drop 删除数据库结构。数据控制语言(DCL:Data Control Language)用于修改数据库结构的操作权限。DCL语句有两种:Grant 授予其他用户对数据库结构(例如表)的访问权限。REVOKE 防治其他用户访问数据库结构dual

5、是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录。我们可以用它来做很多事情,如下:1、查看当前用户,可以在 SQL Plus中执行下面语句select user from dual;2、用来调用系统函数select to_char(sysdate,yyyy-mm-dd hh24:mi:ss) from dual;-获得当前系统时间select SYS_CONTEXT(USERENV,TERMINAL) from dual;-获得主机名select dbms_random.random from dual;-获得一个随机数3、得到序列的下一个值或当前值,

6、用下面语句select your_sequence.nextval from dual;-获得序列your_sequence的下一个值select your_sequence.currval from dual;-获得序列your_sequence的当前值4、可以用做计算器select 7*9 from dual;多表联查SELECT S.SName AS 姓名, CS.CourseName AS 课程, C.Score AS 成绩FROM Students AS S INNER JOIN Score AS C ON (S.SCode = C.StudentID)INNER JOIN Cour

7、se AS CS ON (CS.CourseID = C.CourseID) 优先级1算术运算符2连接符3比较符4IS NOT NULL, LIKE, NOT IN5NOT BETWEEN6NOT 7AND8OR伪列分页:SELECT * FROM ( SELECT A.*, ROWNUM RN FROM student A WHERE ROWNUM 0创建索引:create unique/bitmap index 索引名字 on 表名(字段)创建同义词:CREATE PUBLIC SYNONYM synonym FOR object;WITH 子句使用 WITH 子句, 可以避免在 SELE

8、CT 语句中重复书写相同的语句块WITH 子句将该子句中的语句块执行一次 并存储到用户的临时表空间中使用 WITH 子句可以提高查询效率1.not null 非空【如果在列上定义了not null,那么插入数据时必须为该列提供数据,否则插不进去。】2.unique 唯一键【当定义了唯一约束以后,该列值是不能重复的,但是可以为null】3.primary key 主键【用于唯一的标识表行的数据,当定义主键约束后,该列不但不能重复而且不能为null说明:一张表最多只能有一个主键,但是可以有多个unique约束。联合主键:多列联合起来作为主键。】4.foreign key 外键【用于定义主表和从表之

9、间的关系,外键约束要定义在从表上,主表则必须有主键约束或unique约束,当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为null】5.check 检查【用于强制行数据必须满足的条件,假定在score列上定义了check约束,并要求score列值在0-100之间,如果不在此区间内就提示错误。】DROP CONSTRAINT删除约束DISABLE CONSTRAINT无效化约束ENABLE CONSTRAINT 激活约束查询约束SELECTconstraint_name, constraint_type, search_conditionFROMuser_constraintsWHE

10、REtable_name = EMPLOYEES;UNION 操作符:合并数据INTERSECT 操作符:交集MINUS 操作符:补集回滚:使用 SAVEPOINT 语句在当前事务中创建保存点。使用 ROLLBACK TO SAVEPOINT 语句回滚到创建的保存点视图:CREATE VIEW stud_viewAS SELECT studno, studname, subnoFROM Stud_details;1.查询员工表所有数据, 并说明使用*的缺点答案:select * from emp;使用*的缺点有:查询出了不必要的列;效率上不如直接指定列名。2.查询职位(JOB)为PRESIDE

11、NT的员工的工资答案:select * from emp where job = PRESIDENT;3.查询佣金(COMM)为0或为NULL的员工信息答案:select * from emp where comm = 0 or comm is null;4.查询入职日期在1981-5-1 到1981-12-31之间的所有员工信息答案:select * from emp where hiredatebetween to_date(1981-5-1,yyyy-mm-dd) and to_date(1981-12-31,yyyy-mm-dd);5.查询所有名字长度为4 的员工的员工编号,姓名答案:

12、select * from emp where length(ename) = 4;6.显示10 号部门的所有经理(MANAGER)和20号部门的所有职员(CLERK)的详细信息答案:select * from emp where deptno = 10 and job = MANAGER or deptno = 20 and job=CLERK;7.显示姓名中没有L字的员工的详细信息或含有SM字的员工信息答案:select * from emp where ename not like %L% or ename like %SM%;8.显示各个部门经理(MANAGER)的工资答案:selec

13、t sal from emp where job = MANAGER;9.显示佣金(COMM)收入比工资(SAL)高的员工的详细信息答案:select * from emp where comm sal;10. 把hiredate列看做是员工的生日,求本月过生日的员工答案:select * from emp where to_char(hiredate, mm) = to_char(sysdate , mm);11. 把hiredate列看做是员工的生日,求下月过生日的员工答案:select * from emp where to_char(hiredate, mm) = to_char(ad

14、d_months(sysdate,1) ,mm);12. 求1982年入职的员工答案:select * from emp where to_char(hiredate,yyyy) = 1982;13. 求1981年下半年入职的员工答案:select * from emp where hiredatebetween to_date(1981-7-1,yyyy-mm-dd) and to_date(1982-1-1,yyyy-mm-dd) - 1;14. 求1981年各个月入职的的员工个数答案:select count(*), to_char(trunc(hiredate,month),yyyy-

15、mm)from emp where to_char(hiredate,yyyy)=1981group by trunc(hiredate,month)order by trunc(hiredate,month);15. 查询各个部门的平均工资答案:select deptno,avg(sal) from emp group by deptno;16. 显示各种职位的最低工资答案:select job,min(sal) from emp group by job;17. 按照入职日期由新到旧排列员工信息答案:select * from emp order by hiredate desc;18.

16、查询员工的基本信息,附加其上级的姓名答案:select e.*, e2.ename from emp e, emp e2 where e.mgr = e2.empno;19. 显示工资比ALLEN高的所有员工的姓名和工资答案:select * from emp where sal (select sal from emp where ename=ALLEN);20. 显示与SCOTT从事相同工作的员工的详细信息答案:select * from emp where job = (select * from emp where ename=SCOTT);21. 显示销售部(SALES)员工的姓名答

17、案:select ename from emp e, dept d where e.deptno = d.deptno and d.dname=SALES;22. 显示与30号部门MARTIN员工工资相同的员工的姓名和工资答案:select ename, sal from empwhere sal = (select sal from emp where deptno=30 and ename=MARTIN);23. 查询所有工资高于平均工资(平均工资包括所有员工)的销售人员(SALESMAN)答案:select * from emp where job=SALESMAN and sal (s

18、elect avg(sal) from emp);24. 显示所有职员的姓名及其所在部门的名称和工资答案:select ename, job, dname from emp e, dept d where e.deptno = d.deptno;25. 查询在研发部(RESEARCH)工作员工的编号,姓名,工作部门,工作所在地答案:select empno,ename,dname,loc from emp e, dept dwhere e.deptno = d.deptno and danme=RESEARCH;26. 查询各个部门的名称和员工人数答案:select * from (selec

19、t count(*) c, deptno from emp group by deptno) einner join dept d on e.deptno = d.deptno;27. 查询各个职位员工工资大于平均工资(平均工资包括所有员工)的人数和员工职位答案:select job, count(*) from emp where sal (select avg(sal) from emp) group by job;28. 查询工资相同的员工的工资和姓名答案:select * from emp e where (select count(*) from emp where sal = e.

20、sal group by sal) 1;29. 查询工资最高的3名员工信息答案:select * from (select * from emp order by sal desc) where rownum e.sal)+1 rank from emp e order byrank;31. 求入职日期相同的(年月日相同)的员工答案:select * from emp e where (select count(*) from emp where e.hiredate=hiredate)1;32. 查询每个部门的最高工资答案:select deptno, max(sal) maxsal fro

21、m emp group by deptno order by deptno;33. 查询每个部门,每种职位的最高工资答案:select deptno, job, max(sal) from emp group by deptno, job order by deptno, job;34. 查询每个员工的信息及工资级别答案:select e.*, sg.grade from emp e, salgrade sg where sal between losal and hisal;35. 查询工资最高的第6-10名员工答案:select * from (select e.*,rownum rn f

22、rom(select * from emp order by sal desc) ewhere rownum 5;36. 查询各部门工资最高的员工信息答案:select * from emp e where e.sal = (select max(sal) from emp where (deptno =e.deptno);37. 查询每个部门工资最高的前2名员工答案:select * from emp e where(select count(*) from emp where sal e.sal and e.deptno = deptno) 2;39. 查询所有大于本部门平均工资的员工信息

23、答案:select * from emp e where sal (select avg(sal) from emp where (deptno = e.deptno)order by deptno;40. 查询平均工资最高的部门信息答案:select d.*, avgsal from dept d, (select avg(sal) avgsal, deptno from emp group bydeptno) sewhere avgsal = (select max(avg(sal) from emp group by deptno) and d.deptno =se.deptno;41.

24、 查询大于各部门总工资的平均值的部门信息答案:select d.*,sumsal from dept d, (select sum(sal) sumsal, deptno from emp group bydeptno) sewhere sumsal (select avg(sum(sal) from emp group by deptno) and se.deptno =d.deptno;42. 查询大于各部门总工资的平均值的部门下的员工信息答案:select e.*,sumsal from emp e, (select sum(sal) sumsal, deptno from emp gr

25、oup bydeptno) sewhere sumsal (select avg(sum(sal) from emp group by deptno) and se.deptno =e.deptno;43. 查询没有员工的部门信息答案:select d.* from dept d left join emp e on (e.deptno = d.deptno) where empno is null;44. 查询当前月有多少天答案:select trunc(add_months(sysdate,1),month) - trunc(sysdate,month) from dual;45. 列出最

26、低薪金大于1500的各种工作及此从事此工作的全部雇员人数答案:SELECT job,COUNT(empno)FROM empGROUP BY job HAVING MIN(sal)1500 ;46. 列出薪金高于公司平均薪金的所有员工,所在部门,上级领导,公司的工资等级答案:SELECT e.empno,e.ename,d.dname,m.ename,s.gradeFROM emp e,dept d,emp m,salgrade sWHERE sal(SELECT AVG(sal) FROM emp) AND e.mgr=m.empno AND d.deptno=e.deptno(+)AND

27、e.sal BETWEEN s.losal AND s.hisal ;47. 列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金、部门名称答案:SELECT e.ename,e.sal,d.dname FROM emp e,dept dWHERE sal ALL (SELECT sal FROM emp WHERE deptno=30) AND e.deptno=d.deptno;48. 列出所有部门的详细信息和部门人数答案:SELECT d.dname,d.loc,dt.countFROM dept d,(SELECT deptno,COUNT(*) count FROM emp G

28、ROUP BY deptno) dtWHERE d.deptno=dt.deptno ;49. 显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,并且要满足从事同一工作的雇员的月工资合计大于$5000,输出结果按月工资的合计升序排列答案:SELECT job,SUM(sal) sumFROM empWHERE jobSALESMANGROUP BY job HAVING sum5000ORDER BY sum ;50. 客户表a(idnameaddress)登陆流水表b(idtime)购物流水表c(idtimeproductidproductnum)1.求每个客户的最新登陆时间time,姓名name,客户id?答案:selecta.id,a.name,d.timeastimefromaleftjoin(selectid,max(time)astimefrombgroupbyid)dona.id=d.id;2.查最新登陆并且已经购买商品的客户id,name,登陆的时间time(一条sql语句)答案:selecta.id,a.name,d.timeastimefroma,(selectid,max(time)astimefrombgroupbyid)dwherea.id=d.idandexists(select*fromcwhereid=a.id);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > 计算机原理

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报