Oracle面试题.docx

上传人:b****7 文档编号:23775772 上传时间:2023-05-20 格式:DOCX 页数:14 大小:19.27KB
下载 相关 举报
Oracle面试题.docx_第1页
第1页 / 共14页
Oracle面试题.docx_第2页
第2页 / 共14页
Oracle面试题.docx_第3页
第3页 / 共14页
Oracle面试题.docx_第4页
第4页 / 共14页
Oracle面试题.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

Oracle面试题.docx

《Oracle面试题.docx》由会员分享,可在线阅读,更多相关《Oracle面试题.docx(14页珍藏版)》请在冰豆网上搜索。

Oracle面试题.docx

Oracle面试题

连接用户:

超级用户:

connsys用户名/密码assysdba

普通用户:

connsystem用户名/密码

创建表空间:

CREATETABLESPACEepet_tablespace

DATAFILE'E:

\app\Administrator\oradata\orcl\'

SIZE100M

autoextendonnext32m

maxsize2048m

删除表空间、对象及数据文件:

droptablespacestudyincludingcontentsanddatafiles;

为表空间创建用户

CREATEUSERuser

IDENTIFIEDBYpassword

[DEFAULTTABLESPACEtablespace]

CONNECT:

临时用户

RESOURCE:

更为可靠和正式的用户

DBA:

数据库管理员角色,拥有管理数据库的最高权限

#分配权限或角色

GRANTprivilegesorroleTOuser;

#撤销权限或角色

REVOKEprivilegesorroleFROMuser;

CONNECT角色:

--是授予最终用户的典型权利,最基本的

CREATESESSION--建立会话

RESOURCE角色:

--是授予开发人员的

CREATECLUSTER--建立聚簇

CREATEPROCEDURE--建立过程

CREATESEQUENCE--建立序列

CREATETABLE--建表

CREATETRIGGER--建立触发器

CREATETYPE--建立类型

数据查询语言

(DQL:

DataQueryLanguage)用于检索数据库表中存储的行。

可以使用SQL的SELECT语句编写查询语句。

数据操作语言

(DML:

DataManipulationLanguage)用于修改表的内容。

DML语句有三种,分别为Insert,Update,Delete。

事务控制语言

(TCL:

TransactionControlLanguage)用于将对行所作的修改永久性的存储到表中,或者取消这些修改操作。

TC语句共有3种:

Commit永久性的保存对行所作的修改。

Rollback取消对行所作的修改。

SavePoint设置一个“保存点”,可以将对行所作的修改回滚到此处。

数据定义语言

(DDL:

DataDefinitionLanguage)用于定义构成数据库的数据结构,例如表。

DDL语句有5种基本类型:

分别为

Create创建数据库结构。

Alter修改数据库结构。

Drop删除数据库结构。

数据控制语言

(DCL:

DataControlLanguage)用于修改数据库结构的操作权限。

DCL语句有两种:

Grant授予其他用户对数据库结构(例如表)的访问权限。

REVOKE防治其他用户访问数据库结构

dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录。

我们可以用它来做很多事情,如下:

1、查看当前用户,可以在SQLPlus中执行下面语句

selectuserfromdual;

2、用来调用系统函数

selectto_char(sysdate,'yyyy-mm-ddhh24:

mi:

ss')fromdual;--获得当前系统时间

selectSYS_CONTEXT('USERENV','TERMINAL')fromdual;--获得主机名

selectfromdual;--获得一个随机数

3、得到序列的下一个值或当前值,用下面语句

selectfromdual;--获得序列your_sequence的下一个值

selectfromdual;--获得序列your_sequence的当前值

4、可以用做计算器

select7*9fromdual;

多表联查

SELECT

AS姓名,AS课程,AS成绩

FROMStudentsASS

INNERJOINScoreASCON=

INNERJOINCourseASCSON=

优先级

1算术运算符\2连接符\3比较符\4IS[NOT]NULL,LIKE,[NOT]IN

5[NOT]BETWEEN\6NOT\7AND\8OR

伪列分页:

SELECT*FROM(SELECTA.*,ROWNUMRN

FROMstudentAWHEREROWNUM<=5)WHERERN>0

创建索引:

createunique/bitmapindex索引名字on表名(字段)

创建同义词:

CREATE[PUBLIC]SYNONYMsynonymFORobject;

WITH子句

使用WITH子句,可以避免在SELECT语句中重复书写相同的语句块

WITH子句将该子句中的语句块执行一次并存储到用户的临时表空间中

使用WITH子句可以提高查询效率

null非空【如果在列上定义了notnull,那么插入数据时必须为该列提供数据,否则插不进去。

唯一键【当定义了唯一约束以后,该列值是不能重复的,但是可以为null】

key主键【用于唯一的标识表行的数据,当定义主键约束后,该列不但不能重复而且不能为null

说明:

一张表最多只能有一个主键,但是可以有多个unique约束。

联合主键:

多列联合起来作为主键。

key外键【用于定义主表和从表之间的关系,外键约束要定义在从表上,主表则必须有主键约束或unique约束,当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为null】

检查【用于强制行数据必须满足的条件,假定在score列上定义了check约束,并要求score列值在0-100之间,如果不在此区间内就提示错误。

DROPCONSTRAINT删除约束

DISABLECONSTRAINT无效化约束

ENABLECONSTRAINT激活约束

查询约束SELECTconstraint_name,constraint_type,

search_condition

FROMuser_constraints

WHEREtable_name='EMPLOYEES';

UNION操作符:

合并数据

INTERSECT操作符:

交集

MINUS操作符:

补集

回滚:

使用SAVEPOINT语句在当前事务中创建保存点。

使用ROLLBACKTOSAVEPOINT语句回滚到创建的保存点

视图:

CREATEVIEWstud_view

ASSELECTstudno,studname,subno

FROMStud_details;

1.       查询员工表所有数据,并说明使用*的缺点

答案:

select*fromemp;

使用*的缺点有:

查询出了不必要的列;效率上不如直接指定列名。

2.       查询职位(JOB)为'PRESIDENT'的员工的工资

答案:

select*fromempwherejob='PRESIDENT';

3.       查询佣金(COMM)为0或为NULL的员工信息

答案:

select*fromempwherecomm=0orcommisnull;

4.       查询入职日期在1981-5-1到1981-12-31之间的所有员工信息

答案:

select*fromempwherehiredate

betweento_date('1981-5-1','yyyy-mm-dd')andto_date('1981-12-31','yyyy-mm-dd');

5.       查询所有名字长度为4的员工的员工编号,姓名

答案:

select*fromempwherelength(ename)=4;

6.       显示10号部门的所有经理('MANAGER')和20号部门的所有职员('CLERK')的详细信息

答案:

select*fromempwheredeptno=10andjob='MANAGER'ordeptno=20andjob='CLERK';

7.       显示姓名中没有'L'字的员工的详细信息或含有'SM'字的员工信息

答案:

select*fromempwhereenamenotlike'%L%'orenamelike'%SM%';

8.       显示各个部门经理('MANAGER')的工资

答案:

selectsalfromempwherejob='MANAGER';

9.       显示佣金(COMM)收入比工资(SAL)高的员工的详细信息

答案:

select*fromempwherecomm>sal;

10.   把hiredate列看做是员工的生日,求本月过生日的员工

答案:

select*fromempwhereto_char(hiredate,'mm')=to_char(sysdate,'mm');

11.   把hiredate列看做是员工的生日,求下月过生日的员工

答案:

select*fromempwhereto_char(hiredate,'mm')=to_char(add_months(sysdate,1),'mm');

12.   求1982年入职的员工

答案:

select*fromempwhereto_char(hiredate,'yyyy')='1982';

13.   求1981年下半年入职的员工

答案:

select*fromempwherehiredate

betweento_date('1981-7-1','yyyy-mm-dd')andto_date('1982-1-1','yyyy-mm-dd')-1;

14.   求1981年各个月入职的的员工个数

答案:

selectcount(*),to_char(trunc(hiredate,'month'),'yyyy-mm')

fromempwhereto_char(hiredate,'yyyy')='1981'

groupbytrunc(hiredate,'month')

orderbytrunc(hiredate,'month');

15.   查询各个部门的平均工资

答案:

selectdeptno,avg(sal)fromempgroupbydeptno;

16.   显示各种职位的最低工资

答案:

selectjob,min(sal)fromempgroupbyjob;

17.   按照入职日期由新到旧排列员工信息

答案:

select*fromemporderbyhiredatedesc;

18.   查询员工的基本信息,附加其上级的姓名

答案:

selecte.*,fromempe,empe2where=;

19.   显示工资比'ALLEN'高的所有员工的姓名和工资

答案:

select*fromempwheresal>(selectsalfromempwhereename='ALLEN');

20.   显示与'SCOTT'从事相同工作的员工的详细信息

答案:

select*fromempwherejob=(select*fromempwhereename='SCOTT');

21.   显示销售部('SALES')员工的姓名

答案:

selectenamefromempe,deptdwhere=and='SALES';

22.   显示与30号部门'MARTIN'员工工资相同的员工的姓名和工资

答案:

selectename,salfromemp

wheresal=(selectsalfromempwheredeptno=30andename='MARTIN');

23.   查询所有工资高于平均工资(平均工资包括所有员工)的销售人员('SALESMAN')

答案:

select*fromempwherejob='SALESMAN'andsal>(selectavg(sal)fromemp);

24.   显示所有职员的姓名及其所在部门的名称和工资

答案:

selectename,job,dnamefromempe,deptdwhere=;

25.   查询在研发部('RESEARCH')工作员工的编号,姓名,工作部门,工作所在地

答案:

selectempno,ename,dname,locfromempe,deptd

where=anddanme='RESEARCH';

26.   查询各个部门的名称和员工人数

答案:

select*from(selectcount(*)c,deptnofromempgroupbydeptno)e

innerjoindeptdon=;

27.   查询各个职位员工工资大于平均工资(平均工资包括所有员工)的人数和员工职位

答案:

selectjob,count(*)fromempwheresal>(selectavg(sal)fromemp)groupbyjob;

28.   查询工资相同的员工的工资和姓名

答案:

select*fromempewhere(selectcount(*)fromempwheresal=groupbysal)>1;

29.   查询工资最高的3名员工信息

答案:

select*from(select*fromemporderbysaldesc)whererownum<=3;

30.   按工资进行排名,排名从1开始,工资相同排名相同(如果两人并列第1则没有第2名,从第三名继续排)

答案:

selecte.*,(selectcount(*)fromempwheresal>+1rankfromempeorderbyrank;

31.   求入职日期相同的(年月日相同)的员工

答案:

select*fromempewhere(selectcount(*)fromempwhere=hiredate)>1;

32.   查询每个部门的最高工资

答案:

selectdeptno,max(sal)maxsalfromempgroupbydeptnoorderbydeptno;

33.   查询每个部门,每种职位的最高工资

答案:

selectdeptno,job,max(sal)fromempgroupbydeptno,joborderbydeptno,job;

34.   查询每个员工的信息及工资级别

答案:

selecte.*,fromempe,salgradesgwheresalbetweenlosalandhisal;

35.   查询工资最高的第6-10名员工

答案:

select*from(

selecte.*,rownumrnfrom

(select*fromemporderbysaldesc)e

whererownum<=10)

wherern>5;

36.   查询各部门工资最高的员工信息

答案:

select*fromempewhere=(selectmax(sal)fromempwhere(deptno=);

37.   查询每个部门工资最高的前2名员工

答案:

select*fromempewhere

(selectcount(*)fromempwheresal>and=deptno)<2

orderbydeptno,saldesc;

38.   查询出有3个以上下属的员工信息

答案:

select*fromempewhere

(selectcount(*)fromempwhere=mgr)>2;

39.   查询所有大于本部门平均工资的员工信息

答案:

select*fromempewheresal>

(selectavg(sal)fromempwhere(deptno=)

orderbydeptno;

40.   查询平均工资最高的部门信息

答案:

selectd.*,avgsalfromdeptd,(selectavg(sal)avgsal,deptnofromempgroupbydeptno)se

whereavgsal=(selectmax(avg(sal))fromempgroupbydeptno)and=;

41.   查询大于各部门总工资的平均值的部门信息

答案:

selectd.*,sumsalfromdeptd,(selectsum(sal)sumsal,deptnofromempgroupbydeptno)se

wheresumsal>(selectavg(sum(sal))fromempgroupbydeptno)and=;

42.   查询大于各部门总工资的平均值的部门下的员工信息

答案:

selecte.*,sumsalfromempe,(selectsum(sal)sumsal,deptnofromempgroupbydeptno)se

wheresumsal>(selectavg(sum(sal))fromempgroupbydeptno)and=;

43.   查询没有员工的部门信息

答案:

selectd.*fromdeptdleftjoinempeon=whereempnoisnull;

44.   查询当前月有多少天

答案:

selecttrunc(add_months(sysdate,1),'month')-trunc(sysdate,'month')fromdual;

45.   列出最低薪金大于1500的各种工作及此从事此工作的全部雇员人数

答案:

SELECTjob,COUNT(empno)

FROMemp

GROUPBYjobHAVINGMIN(sal)>1500;

46.   列出薪金高于公司平均薪金的所有员工,所在部门,上级领导,公司的工资等级

答案:

SELECT,,,,

FROMempe,deptd,empm,salgrades

WHEREsal>(SELECTAVG(sal)FROMemp)AND=AND=(+)ANDBETWEENAND;

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

答案:

SELECT,,FROMempe,deptd

WHEREsal>ALL(SELECTsalFROMempWHEREdeptno=30)AND=;

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

答案:

SELECT,,

FROMdeptd,(SELECTdeptno,COUNT(*)countFROMempGROUPBYdeptno)dt

WHERE=;

49.   显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,并且要满足从事同一工作的雇员的月工资合计大于$5000,输出结果按月工资的合计升序排列

答案:

SELECTjob,SUM(sal)sum

FROMemp

WHEREjob<>'SALESMAN'

GROUPBYjobHAVINGsum>5000

ORDERBYsum;

50.   客户表a(id name address) 登陆流水表b(id time) 购物流水表c(id time productid productnum)

1.求每个客户的最新登陆时间time,姓名name,客户id

答案:

select ,, as time 

from a left join (select id,max(time) as time from b group by id) d

on  = ;

2.查最新登陆并且已经购买商品的客户id,name,登陆的时间time(一条sql语句)

答案:

select ,, as time 

from a,(select id,max(time) as time from b group by id) d

where  = 

and exists (select * from c where id = ;

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

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1