Oracle面试题Word下载.docx
- 文档编号:8258482
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:11
- 大小:19.47KB
Oracle面试题Word下载.docx
《Oracle面试题Word下载.docx》由会员分享,可在线阅读,更多相关《Oracle面试题Word下载.docx(11页珍藏版)》请在冰点文库上搜索。
DataQueryLanguage)用于检索数据库表中存储行。
可以使用SQLSELECT语句编写查询语句。
数据操作语言
(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'
--获得主机名
selectdbms_random.randomfromdual;
--获得一种随机数
3、得到序列下一种值或当前值,用下面语句
selectyour_sequence.nextvalfromdual;
--获得序列your_sequence下一种值
selectyour_sequence.currvalfromdual;
--获得序列your_sequence当前值
4、可以用做计算器
select7*9fromdual;
多表联查
SELECT
S.SNameAS姓名,CS.CourseNameAS课程,C.ScoreAS成绩
FROMStudentsASS
INNERJOINScoreASCON(S.SCode=C.StudentID)
INNERJOINCourseASCSON(CS.CourseID=C.CourseID)
优先级
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子句可以提高查询效率
1.notnull非空【如果在列上定义了notnull,那么插入数据时必要为该列提供数据,否则插不进去。
】
2.unique唯一键【当定义了唯一约束后来,该列值是不能重复,但是可觉得null】
3.primarykey主键【用于唯一标记表行数据,当定义主键约束后,该列不但不能重复并且不能为null
阐明:
一张表最多只能有一种主键,但是可以有各种unique约束。
联合主键:
多列联合起来作为主键。
4.foreignkey外键【用于定义主表和从表之间关系,外键约束要定义在从表上,主表则必要有主键约束或unique约束,当定义外键约束后,规定外键列数据必要在主表主键列存在或是为null】
5.check检查【用于强制行数据必要满足条件,假定在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='
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'
);
5.
查询所有名字长度为4员工员工编号,姓名
select*fromempwherelength(ename)=4;
6.
显示10号部门所有经理('
MANAGER'
)和20号部门所有职工('
CLERK'
)详细信息
select*fromempwheredeptno=10andjob='
ordeptno=20andjob='
7.
显示姓名中没有'
L'
字员工详细信息或具有'
SM'
字员工信息
select*fromempwhereenamenotlike'
%L%'
orenamelike'
%SM%'
8.
显示各个部门经理('
)工资
selectsalfromempwherejob='
9.
显示佣金(COMM)收入比工资(SAL)高员工详细信息
select*fromempwherecomm>
sal;
10.
把hiredate列看做是员工生日,求本月过生日员工
select*fromempwhereto_char(hiredate,'
mm'
)=to_char(sysdate,'
11.
把hiredate列看做是员工生日,求下月过生日员工
)=to_char(add_months(sysdate,1),'
12.
求1982年入职工工
select*fromempwhereto_char(hiredate,'
yyyy'
)='
1982'
13.
求1981年下半年入职工工
1981-7-1'
1982-1-1'
)-1;
14.
求1981年各个月入职工工个数
selectcount(*),to_char(trunc(hiredate,'
month'
),'
yyyy-mm'
)
fromempwhereto_char(hiredate,'
)='
1981'
groupbytrunc(hiredate,'
orderbytrunc(hiredate,'
15.
查询各个部门平均工资
selectdeptno,avg(sal)fromempgroupbydeptno;
16.
显示各种职位最低工资
selectjob,min(sal)fromempgroupbyjob;
17.
按照入职日期由新到旧排列员工信息
select*fromemporderbyhiredatedesc;
18.
查询员工基本信息,附加其上级姓名
selecte.*,e2.enamefromempe,empe2wheree.mgr=e2.empno;
19.
显示工资比'
ALLEN'
高所有员工姓名和工资
select*fromempwheresal>
(selectsalfromempwhereename='
20.
显示与'
SCOTT'
从事相似工作员工详细信息
select*fromempwherejob=(select*fromempwhereename='
21.
显示销售部('
SALES'
)员工姓名
selectenamefromempe,deptdwheree.deptno=d.deptnoandd.dname='
22.
显示与30号部门'
MARTIN'
员工工资相似员工姓名和工资
selectename,salfromemp
wheresal=(selectsalfromempwheredeptno=30andename='
23.
查询所有工资高于平均工资(平均工资涉及所有员工)销售人员('
SALESMAN'
select*fromempwherejob='
andsal>
(selectavg(sal)fromemp);
24.
显示所有职工姓名及其所在部门名称和工资
selectename,job,dnamefromempe,deptdwheree.deptno=d.deptno;
25.
查询在研发部('
RESEARCH'
)工作员工编号,姓名,工作部门,工作所在地
selectempno,ename,dname,locfromempe,deptd
wheree.deptno=d.deptnoanddanme='
26.
查询各个部门名称和员工人数
select*from(selectcount(*)c,deptnofromempgroupbydeptno)e
innerjoindeptdone.deptno=d.deptno;
27.
查询各个职位员工工资不不大于平均工资(平均工资涉及所有员工)人数和员工职位
selectjob,count(*)fromempwheresal>
(selectavg(sal)fromemp)groupbyjob;
28.
查询工资相似员工工资和姓名
select*fromempewhere(selectcount(*)fromempwheresal=e.salgroupbysal)>
1;
29.
查询工资最高3名员工信息
select*from(select*fromemporderbysaldesc)whererownum<
=3;
30.
按工资进行排名,排名从1开始,工资相似排名相似(如果两人并列第1则没有第2名,从第三名继续排)
selecte.*,(selectcount(*)fromempwheresal>
e.sal)+1rankfromempeorderbyrank;
31.
求入职日期相似(年月日相似)员工
select*fromempewhere(selectcount(*)fromempwheree.hiredate=hiredate)>
1;
32.
查询每个部门最高工资
selectdeptno,max(sal)maxsalfromempgroupbydeptnoorderbydeptno;
33.
查询每个部门,每种职位最高工资
selectdeptno,job,max(sal)fromempgroupbydeptno,joborderbydeptno,job;
34.
查询每个员工信息及工资级别
selecte.*,sg.gradefromempe,salgradesgwheresalbetweenlosalandhisal;
35.
查询工资最高第6-10名员工
select*from(
selecte.*,rownumrnfrom
(select*fromemporderbysaldesc)e
whererownum<
=10)
wherern>
5;
36.
查询各部门工资最高员工信息
select*fromempewheree.sal=(selectmax(sal)fromempwhere(deptno=e.deptno));
37.
查询每个部门工资最高前2名员工
select*fromempewhere
(selectcount(*)fromempwheresal>
e.salande.deptno=deptno)<
2
orderbydeptno,saldesc;
38.
查询出有3个以上下属员工信息
(selectcount(*)fromempwheree.empno=mgr)>
2;
39.
查询所有不不大于本部门平均工资员工信息
select*fromempewheresal>
(selectavg(sal)fromempwhere(deptno=e.deptno))
orderbydeptno;
40.
查询平均工资最高部门信息
selectd.*,avgsalfromdeptd,(selectavg(sal)avgsal,deptnofromempgroupbydeptno)se
whereavgsal=(selectmax(avg(sal))fromempgroupbydeptno)andd.deptno=se.deptno;
41.
查询不不大于各部门总工资平均值部门信息
selectd.*,sumsalfromdeptd,(selectsum(sal)sumsal,deptnofromempgroupbydeptno)se
wheresumsal>
(selectavg(sum(sal))fromempgroupbydeptno)andse.deptno=d.deptno;
42.
查询不不大于各部门总工资平均值部门下员工信息
selecte.*,sumsalfromempe,(selectsum(sal)sumsal,deptnofromempgroupbydeptno)se
(selectavg(sum(sal))fromempgroupbydeptno)andse.deptno=e.deptno;
43.
查询没有员工部门信息
selectd.*fromdeptdleftjoinempeon(e.deptno=d.deptno)whereempnoisnull;
44.
查询当前月有多少天
selecttrunc(add_months(sysdate,1),'
)-trunc(sysdate,'
45.
列出最低薪金不不大于1500各种工作及此从事此工作所有雇员人数
SELECTjob,COUNT(empno)
FROMemp
GROUPBYjobHAVINGMIN(sal)>
1500;
46.
列出薪金高于公司平均薪金所有员工,所在部门,上级领导,公司工资级别
SELECTe.empno,e.ename,d.dname,m.ename,s.grade
FROMempe,deptd,empm,salgrades
WHEREsal>
(SELECTAVG(sal)FROMemp)ANDe.mgr=m.empnoANDd.deptno=e.deptno(+)ANDe.salBETWEENs.losalANDs.hisal;
47.
列出薪金高于在部门30工作所有员工薪金员工姓名和薪金、部门名称
SELECTe.ename,e.sal,d.dnameFROMempe,deptd
WHEREsal>
ALL(SELECTsalFROMempWHEREdeptno=30)ANDe.deptno=d.deptno;
48.
列出所有部门详细信息和部门人数
SELECTd.dname,d.loc,dt.count
FROMdeptd,(SELECTdeptno,COUNT(*)countFROMempGROUPBYdeptno)dt
WHEREd.deptno=dt.deptno;
49.
显示非销售人员工作名称以及从事同一工作雇员月工资总和,并且要满足从事同一工作雇员月工资共计不不大于$5000,输出成果按月工资共计升序排列
SELECTjob,SUM(sal)sum
WHEREjob<
>
'
GROUPBYjobHAVINGsum>
5000
ORDERBYsum;
50.
客户表a(id
name
address)
登陆流水表b(id
time)
购物流水表c(id
time
productid
productnum)
1.求每个客户最新登陆时间time,姓名name,客户id?
select
a.id,a.name,d.time
as
from
a
left
join
(select
id,max(time)
b
group
by
id)
d
on
a.id
=d.id
2.查最新登陆并且已经购买商品客户id,name,登陆时间time(一条sql语句)
a,(select
where
and
exists
*
c
id
=
a.id);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 试题