当前位置:首页 > 技能培训 > 正文

oracle数据库面试题,oracle数据库面试题,如下,求解!

技能培训 · Mar 30, 2024

本文目录一览:

oracle面试题

3.emp a 代表emp表,a是该表的别名:select * from table_name {表别名}({}内可取可不取);
a.mgr:emp表中mgr这个字段的信息
6.(select dname from dept where deptno in(a.deptno)) as dname这个是个完整的语法,重新定义了d.name,而且dname是dept表中的列,不存在于emp表中
14.a.deptno和b.deptno是不同表中相同字段名的信息,a和b只是不同表的别名
16.groupby 是分组函数,该语句中是把检索出来的数据按照job分组
3.select ename,(select ename from emp where empno in(a.mgr)) from emp a ;
整个查询分为子查询和父查询,(select ename from emp where empno in(a.mgr))为子查询,emp a指的是员工表,a为这个查询为emp表指定的别名,知道了a
代表什么,a.mgr就好理解了,a.mgr其实就是emp.mgr,表示emp员工表中的mgr(上级编号)字段,emp表中记录了员工及员工上级的信息,a.mgr就用来指明员工
的上级的编号,然后输出员工姓名及他上级姓名。
6.虽然dname和ename在不同的两张表中,但是通过语句where deptno in(a.deptno)将两张表的信息关联上了,这样就能得到员工姓名及该员工所在的部门名称。
14.a.deptno,b.deptno分别代表部门表中的部门编号字段和员工表中的部门编号字段,它们的作用是将独立的部门表和员工表中的信息关联起来,令两个表的信息
一一对应起来,emp b用来输出ename,sal字段,b为emp表在查询中的别名,可以任意命名,因为a这个名称已经赋予给dept这个表,若再将a赋予emp表,则会造成
数据库无法识别a代表的是dept表还是emp表,所以此处命名为b而不是a。
16.group by有分类作用,此处表示,安装job的类型将查询结果分为几类,每一类工作中包含很多不同的工资,然后用min函数从里面选出最小的工资,当需要对
查询结果进行聚合时,便可使用group by语句,其后紧跟聚合函数外的所有字段,比如此处的job字段。

oracle数据库面试题,如下,求解!

1product主键id顾客表主键acid商品交易表为联合主键(acid+id),同时acid和id分别是顾客表和商品表的外键2select b.acname,b.acadressfrom product a,customer b,order c where a.id=c.id and b.acid=c.acidand a.name='李子'3select t1.acnamefrom(select b.acnamefrom product a,customer b,order c where a.id=c.id and b.acid=c.acidand a.name='李子') t1,(select b.acnamefrom product a,customer b,order c where a.id=c.id and b.acid=c.acidand a.name='苹果') t2where t1.acname=t2.acname4select b.acname,sum(case when type='家电' then a.price*c.amount else 0 end) as 家电价格,sum(case when type='水果' then a.price*c.amount else 0 end) as 水果价格from product a,customer b,order c where a.id=c.id and b.acid=c.acidgroup by b.acname

ORACLE数据库面试题

oracle数据库优化的话主要有以下几个方面(我接触过的,可能不全面):
1
查询语句的优化,这个主要是根据语句和数据库索引的情况,结合查询计划的分析结果,对性能较低的查询语句进行重写,在执行查询前执行表分析语句也可以算这里;
2
数据结构优化,这个包括根据实际的应用中业务逻辑,对数据库的结构进行重新设计,或者创建相关索引里提高查询效率;
3
数据库设置优化,这方面主要是调整数据库和数据结构的相关参数提高应用访问系统的效率;
4
存储结构优化,在数据量较大的情况下,可以考虑通过数据库的存储结构进行优化,比如对数据进行partition,将数据存储在磁盘阵列服务器上等。
我的经验有限,以上是部分建议
1、update T set LOGDATE = '2003-01-01' where LOGDATE = '2001-02-11'
2、select * from T where rowid not in(select max(rowid) from T group by ID,NAME,ADDRESS,PHONE,LOGDATE);
3、delete from T where rowid not in(select max(rowid) from T group by ID,NAME,ADDRESS,PHONE,LOGDATE);
4、update T
set T.ADDRESS=(select E.ADDRESS from E where E.NAME=T.NAME),
T.PHONE=(select E.PHONE from E where E.NAME=T.NAME);
5、select * from (select rownum as xx,T.* from T) where xx between 3 and 5;
以上都是亲自试过以后才回答的
1.
update
t
set
logdate=to_date('2003-01-01','yyyy-mm-dd')
where
logdate=to_date('2001-02-11','yyyy-mm-dd');
2.
select
*
from
t
where
name
in
(select
name
from
t
group
by
name
having
coung(*)>1)
order
by
name;--没说清楚,到底是升序还是降序
3.
select
ID,NAME,ADDRESS,PHONE,LOGDATE
from
(
select
t.*,row_number()
over(partition
by
name
order
by
name)
rn
from
t
)
where
rn
=
1;
4.
update
t
set
(address,phone)=
(select
address,phone
from
e
where
e.name=t.name);
5.
select
*
from
t
where
rownum
<=5
minus
select
*
from
t
where
rownum
<=2;
也没什么特别的地方,有些题目用oracle特有的函数去做会比较简单,像在第三题中用到的oracle的分析函数,以及在第一题中用到的oracle的to_char()函数。
这几个题目主要是看你能不能使用oracle的函数去处理
1.
update
t
set
logdate=to_date('2003-01-01','yyyy-mm-dd')
where
logdate=to_date('2001-02-11','yyyy-mm-dd');
2.
select
*
from
t
where
name
in
(select
name
from
t
group
by
name
having
coung(*)>1)
order
by
name;--没说清楚,到底是升序还是降序
3.
select
ID,NAME,ADDRESS,PHONE,LOGDATE
from
(
select
t.*,row_number()
over(partition
by
name
order
by
name)
rn
from
t
)
where
rn
=
1;
4.
update
t
set
(address,phone)=
(select
address,phone
from
e
where
e.name=t.name);
5.
select
*
from
t
where
rownum
<=5
minus
select
*
from
t
where
rownum
<=2;
也没什么特别的地方,有些题目用oracle特有的函数去做会比较简单,像在第三题中用到的oracle的分析函数,以及在第一题中用到的oracle的to_char()函数。
这几个题目主要是看你能不能使用oracle的函数去处理
1.update T set logdate='2003-01-01';
2.select * from T
where name in (select name from T group by name having count(name) > 1) order by name;
1.
update t
set logdate=to_date('2003-01-01','yyyy-mm-dd')
where logdate=to_date('2001-02-11','yyyy-mm-dd');
2.
select *
from t
where name in (select name from t group by name having coung(*)>1)
order by name;--没说清楚,到底是升序还是降序
3.
select ID,NAME,ADDRESS,PHONE,LOGDATE
from
(
select t.*,row_number() over(partition by name order by name) rn
from t
)
where rn = 1;
4.
update t
set (address,phone)=
(select address,phone from e where e.name=t.name);
5.
select *
from t
where rownum <=5
minus
select *
from t
where rownum <=2;
也没什么特别的地方,有些题目用oracle特有的函数去做会比较简单,像在第三题中用到的oracle的分析函数,以及在第一题中用到的oracle的to_char()函数。
这几个题目主要是看你能不能使用oracle的函数去处理

oracle面试题:在一个上亿条数据的表中,批量插入大量数据,并根据内容重新定义索引,怎么做最有效率

为大表添加新的分区,向新分区中导入数据,然后创建本地分区索引。如果大表本身有分区索引,先让索引在新的分区上失效,imp命令中添加skip_unusable_indexes=y参数,数据导入后再rebuild分区索引即可。
1、首先明确一点,如果每条数据需要一秒的时间,假如是一亿条数据至少需要2年左右,意味着你两年都不能使用这个数据库,在现实生活中,你认为可能这样做吗?
2、解决这类问题的最好办法就是:时间换空间,例如:最早的新浪微薄的用户登陆日志就这样实现的,他的登陆日志并不是在用户每次登陆后进行更新的,而当用户量少的时间段进行数据的更新操作,或则每次用户登陆的时候多执行一条更新的语句,不过这样做,缺少实时性。
3、正所谓:“鱼和熊掌二者不可得兼”,我认为并没有空间和时间可以得到完全平衡的方法,只是看你更在意空间还是时间问题。

oracle sql 语句 面试题

--把这两个表id查出来组成一个记录集SELECT id FROM emp1 UNION ALL SELECT id FROM sext ------------------id1234145--上面的记录集取别名为t 根据这个t 的id等于emp1的id的条件查出t中记录数小于2的emp1记录SELECT * FROM emp1 e WHERE (SELECT COUNT(*)FROM (SELECT id FROM emp1 UNION ALL SELECT id FROM sext) tWHERE t.id = e.id) < 2---------------------------id name2 b3 c
希望对你能有所帮助。
(1)统计有学生选修的课程门数
select count(distinct c#) from SC
2)求选修C4课程的女学生的平均年龄
select avg(s.age) --最好都带上前缀,养成好习惯
from s,c,sc where s.s#=sc.s# and c.c#=sc.c#
and c.cname='C4' and s.sex='女'--字符类型带引号,必须注意大小写,你那么写好麻烦
3)求刘老师所授的课程的每门课程的平均成绩
select c.cname , avg(grade) from sc , c
where c.teacher =' liu' and sc.c# = c.c#
group by c.cname --select后是什么字段,这地方你也得最少有这个字段
(4)统计每门课程的学生选修人数(超过10人的课程才统计)。要求显示课程号和人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。
select t.*
from
(select sc.c#, count(s#) counnt_s from s,sc where s.s# = sc.s# group by sc.c# having count(s#) >10) t
order by counnt_s desc,c# asc --你排序不对,另外oracle不可根据别名排序,只可再做嵌套
5)检索学号比王军同学大,而年龄比他小的学生姓名
select a.s#
from
(select s# from s where s#>(select s# from s where sname='王军') a,
select s# from s where age>(select age from s where sname='王军') b
where a.s#=b.s#
6)求年龄大于女同学平均年龄的男学生的姓名和年龄
select sname,age from s
where age>
(select avg(age) from s where sex = 'nv') and sex = 'nan' --没问题
7)求年龄大于所有女同学年龄的男学生的姓名和年龄
select sname ,age from s
where age>(select max(age) from s where sex = 'nv') and sex = 'nan' --没问题

oracle几道简单面试题,请大侠帮忙

根据一楼我补充下我知道的几点吧:
2.索引
是否建立索引,数据量是要看的,另外还要参考你取值的范围,比如你有一列性别项,你要查性别为男的,有一半的结果是符合你要求的,那这种情况就不应该考虑建索引
4.存储过程
除了杀进程,其实主要是要检查开发人员写的sql语句,找出不合理的地方进行优化
5.分区表 这个和一楼观点有些许差异
个人觉得没有数据量必须大于多少才能用这样的的一个说法,应该是参考你的业务和你的需求还有你的数据量来的,是不是需要用到分区表,也不是说1G的表就不能用分区表
6.临时空间这个应该还会考到如何清空吧:
1.加大临时表空间(一般不用)
2.新建一个临时表空间,然后切换,再删掉旧的临时空间
3.重启下数据库,临时表空间自动清空
7.这点内容东西比较多,我描述的不大号,上网查下吧
我是开发人员,只回答下第一点。
为啥要切11g, 如果不是必须没必要弄些风险出来,然后考虑是否值得。
数据库的大小 , 切换的时间, 种种。 其实迁移了我想好处没啥,至少目前我看来是这样,当然面试题 看那人考的是你哪方面了。
1,数据库迁移需要考虑的问题很多,这个一句两句也说不完;
2,首先考虑的就是数据量,如果是小表,没有索引反而访问还要快一些。
3,权衡全表还是走索引,看SQL的执行计划就可以了;
4,这个数据库对象是用在两个数据库之间联接,交换,查询数据用的。
5,去数据库里查锁住的进程,杀了就可以了。之后再分析原因。
6,分区表是数据量大于1.5gb以上才用的吧。
7,临时表空间当然会满,查视图也是一样的。
8,开了归档就相当于win系统的设置里开了系统还原一样。
9,redo这个设置要看实际情况,根据主机CUP处理能力,数据库优化参数等因素决定的。

Oracle DBA面试题

CUUG网站上有一部分DBA面试题你可以去看下,也可以问问他们陈老师,面试的时候怎么回答容易被录取。
列举几个比较容易被问到的问题。(来自cuug)
1. 解释冷备份和热备份的不同点以及各自的优点
解答:热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库。热备份的优点在于当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。冷备份的优点在于它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,数据库性能会比归档模式稍好。(因为不必将archive log写入硬盘)
2. 你必须利用备份恢复数据库,但是你没有控制文件,该如何解决问题呢?
解答:重建控制文件,用带backup control file 子句的recover 命令恢复数据库。
3. 如何转换init.ora到spfile?
解答:使用create spfile from pfile 命令
.
4. 解释data block , extent 和 segment的区别(这里建议用英文术语)
解答:data block是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时,连续的data block就组成了extent . 一个数据库对象拥有的所有extents被称为该对象的segment.
5. 给出两个检查表结构的方法
解答:1、DESCRIBE命令
2、DBMS_METADATA.GET_DDL 包
6. 怎样查看数据库引擎的报错
解答:alert log.
7. 比较truncate和delete 命令
解答:两者都可以用来删除表中所有的记录。区别在于:truncate是DDL操作,它移动HWK,不需要 rollback segment .而Delete是DML操作, 需要rollback segment 且花费较长时间.
8. 使用索引的理由
解答:快速访问表中的data block
9. 给出在STAR SCHEMA中的两种表及它们分别含有的数据
解答:Fact tables 和dimension tables. fact table 包含大量的主要的信息而 dimension tables 存放对fact table 某些属性描述的
信息
10. FACT Table上需要建立何种索引?
解答:位图索引(bitmap index)
11. 给出两种相关约束?
解答:主键和外键
12. 如何在不影响子表的前提下,重建一个母表
解答:子表的外键强制失效,重建母表,激活外键
13. 解释归档和非归档模式之间的不同和它们各自的优缺点
解答:归档模式是指你可以备份所有的数据库 transactions并恢复到任意一个时间点。非归档模式则相反,不能恢复到任意一个时间点。
但是非归档模式可以带来数据库性能上的少许提高
14. 如何建立一个备份控制文件?
解答:Alter database backup control file to trace.
15. 给出数据库正常启动所经历的几种状态 ?
解答:
STARTUP NOMOUNT – 数据库实例启动
STARTUP MOUNT - 数据库装载
STARTUP OPEN – 数据库打开
16. 哪个column可以用来区别V$视图和GV$视图?
解答: INST_ID 指明集群环境中具体的某个instance 。
17. 如何生成explain plan?
解答:
运行utlxplan.sql. 建立plan 表针对特定SQL语句,使用 explain plan set statement_id = 'tst1' into plan_table 运行
utlxplp.sql 或 utlxpls.sql察看explain plan
18. 如何增加buffer cache的命中率?
解答:在数据库较繁忙时,适用buffer cache advisory 工具,查询v$db_cache_advice . 如果有必要更改,可以使用 alter system set
db_cache_size 命令
19. ORA-01555的应对方法?
解答:具体的出错信息是snapshot too old within rollback seg , 通常可以通过增大rollback seg来解决问题。当然也需要察看一下具
体造成错误的SQL文本
20. 解释$ORACLE_HOME和$ORACLE_BASE的区别?
解答:ORACLE_BASE是oracle的根目录,ORACLE_HOME是oracle产品的目录

Oracle数据库的数据提取(一道面试题)

--建立临时视图1,检索每个部门第一名分数
create
or
replace
view
temp_v1
as
select
部门号,max(成绩)
as
成绩
from
Employee
group
by
部门号;
--在临时视图1的基础上建立临时视图2,检索第二名分数
create
or
replace
view
temp_v2
as
select
部门号,max(成绩)
as
成绩
from
Employee
where
(部门号,成绩)
not
in
(select
*
from
temp_v1)
group
by
部门号;
--联合两个临时视图的查询结果,建立临时视图3
create
or
replace
view
temp_v3
as
select
*
from
(select
*
from
temp_v1
union
select
*
from
temp_v2)
order
by
部门号,成绩;
--建立目标视图
create
or
replace
view
VdepEm2
as
select
部门号,员工号,成绩
from
Employee
where(部门号,成绩)
in
(select
*
from
temp_v3);
*******************
昨天有点事情耽搁了,这个应该可以实现你的要求。如果不允许建立临时视图的话,你把这几个临时视图糅进去就可以了。

Oracle数据库面试题 用户的权限都有哪些

  系统权限: 允许用户执行特定的数据库动作,如创建表、创建索引、连接实例等(对用户而言)
  对象权限: 允许用户操纵一些特定的对象,如读取视图,可更新某些列、执行存储过程等(是针对表或视图而言的)
  1.系统权限
  超过一百多种有效的权限(SELECT * FROM SYSTEM_PRIVILEGE_MAP查)
  数据库管理员具有高级权限以完成管理任务,例如:
  –创建新用户
  –删除用户
  –删除表
  –备份表
  系统权限分类:
  DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
  RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
  CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
  对于普通用户:授予connect, resource权限。
  对于DBA管理用户:授予connect,resource, dba权限。
  a.常用的系统权限:
  CREATE SESSION 创建会话
  CREATE SEQUENCE 创建序列
  CREATE SYNONYM 创建同名对象
  CREATE TABLE 在用户模式中创建表
  CREATE ANY TABLE 在任何模式中创建表
  DROP TABLE 在用户模式中删除表
  DROP ANY TABLE 在任何模式中删除表
  CREATE PROCEDURE 创建存储过程
  EXECUTE ANY PROCEDURE 执行任何模式的存储过程
  CREATE USER 创建用户
  DROP USER 删除用户
  CREATE VIEW 创建视图
  2.对象权限
  不同的对象具有不同的对象权限
  对象的拥有者拥有所有权限
  对象的拥有者可以向外分配权限
  ORACLE一共有种对象权限
  对象权限 表 视图 序列 过程
  修改(alter) √ √
  删除(delete) √ √
  执行(execute) √
  索引(index) √
  插入(insert) √ √
  关联(references) √ √
  选择(select) √ √ √
  更新(update) √ √