Oracle面试题.docx
- 文档编号:27523274
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:15
- 大小:19.39KB
Oracle面试题.docx
《Oracle面试题.docx》由会员分享,可在线阅读,更多相关《Oracle面试题.docx(15页珍藏版)》请在冰豆网上搜索。
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 = ;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 试题