oracle 数据库开发面试题

本文总结了Oracle开发岗位面试中常见的问题,包括DELETE与TRUNCATE的区别、数据库三范式的解释、NVL与NVL2函数的用法及区别,以及集合操作符MINUS和INTERSECT的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近参加了数场面试,总结一下竞聘oracle 开发岗位最常问到哪些问题:


1、delete 与 truncate 区别?

1)truncate 是DDL语句,delete 是DML语句;

2)truncate 速度远快于 delete;

      原因是:当我们执行delete操作时所有表数据先被copy到回滚表空间,数据量不同花费时间长短不一。而truncate是直接删除数据不进回滚表空间。

3)接(2)这也就导致了delete数据后我们可以运行rollback进行数据回滚,而truncate则是永久删除不能回滚;

4)truncate 操作不会触发表上的delete触发器,而delete会正常触发;

5)truncate语句不能带where条件意味着只能全部数据删除,而delete可删除部分数据;

6)truncate 操作会重置表的高水位线(High Water Mark),而delete不会。

ps: 有关高水位线HWM知识清参考文章:http://blog.csdn.net/indexman/article/details/25910255


2、解释一下数据库三范式?

请参考:http://blog.csdn.net/indexman/article/details/19907731


3、NVL与NVL2两个函数的用法和区别?

NVL (expr1, expr2):expr1为NULL,返回expr2;不为NULL,返回expr1。注意两者的类型要一致
NVL2 (expr1, expr2, expr3) :expr1不为NULL,返回expr2;为NULL,返回expr3。expr2和expr3类型不同的话,expr3会转换为expr2的类型 

看一下官方示例:commission即为工资提成

HR@orcl> SELECT last_name, NVL(TO_CHAR(commission_pct), 'Not Applicable')
  2  "COMMISSION" FROM employees
  3  WHERE last_name LIKE 'B%'
  4  ORDER BY last_name;

LAST_NAME                 COMMISSION
------------------------- ----------------------------------------
Baer                      Not Applicable
Baida                     Not Applicable
Banda                     .1
Bates                     .15
Bell                      Not Applicable
Bernstein                 .25
Bissot                    Not Applicable
Bloom                     .2
Bull                      Not Applicable


 
HR@orcl> SELECT last_name, salary, NVL2(commission_pct,
  2  salary + (salary * commission_pct), salary) income
  3  FROM employees WHERE last_name like 'B%'
  4  ORDER BY last_name;

LAST_NAME                     SALARY     INCOME
------------------------- ---------- ----------
Baer                           10000      10000
Baida                           2900       2900
Banda                           6200       6820
Bates                           7300       8395
Bell                            4000       4000
Bernstein                       9500      11875
Bissot                          3300       3300
Bloom                          10000      12000
Bull                            4100       4100


4、集合操作符minus和interset

假设表A和表B数据如下:

表A:

data

----------

a

b

b

c


表B

data

----------

b

c

d

d


问1:SELECT DATA FROM A  MINUS SELECT DATA FROM B; 执行结果?

--------------------------------------------------------------------------------------------------

答案:

a


问2:SELECT DATA FROM A  INTERSECT SELECT DATA FROM B; 执行结果?

 答案:

b

c


集合操作符总结:

1)UNION:由每个查询 选择的 所有不重复的行组成。并集不包含重复值, 默认按第 1 个查询的第 1 列升序排列。

2)UNION ALL: 由每个查询 选择的 所有的行,完全并集包含重复值, 不排序。

3)  MINUS : 在第一个查询中, 不在后面查询中的行。不包含重复, 按第1 查询的第 1 列升序排列。

4)INTERSECT: 取每个查询结果的交集, 不包含重复行, 按1 个查询的第 1 列升序排列。




敬请期待!


------------------------------

Dylan    Presents.

### Oracle 数据库开发面试题 以下是关于 Oracle 数据库开发的一些常见面试题目及其解答: #### 1. 如何通过审计功能监控用户活动? 可以通过查询 `DBA_AUDIT_TRAIL` 视图来跟踪用户的操作记录。例如,以下 SQL 查询可用于获取特定模式下的对象访问详情: ```sql SELECT OS_USERNAME, USERNAME, USERHOST, TERMINAL, TIMESTAMP, OWNER, OBJ_NAME, ACTION_NAME, SESSIONID, OS_PROCESS, SQL_TEXT FROM DBA_AUDIT_TRAIL b WHERE b.owner = 'LOGMINER'; ``` 这条语句能够帮助数据库管理员有效地监督和审查用户的行为[^1]。 #### 2. 创建物化视图时应考虑哪些要素? 创建物化视图的主要目的是优化复杂查询的性能或实现在分布式环境中的数据同步。下面展示了一种典型的物化视图定义方法: ```sql CREATE MATERIALIZED VIEW mv_name REFRESH FORCE ON DEMAND START WITH SYSDATE NEXT TO_DATE(CONCAT(TO_CHAR(SYSDATE+1,'YYYY-MM-DD'),' 22:00:00'),'YYYY-MM-DD HH24:MI:SS') AS SELECT d.deptno, COUNT(*) cnt FROM emp e, dept d WHERE e.deptno = d.deptno GROUP BY d.deptno; ``` 这段代码指定了一个基于需求触发刷新机制的物化视图,并安排每天晚上十点钟执行自动更新任务[^2]。 #### 3. RAC 和 RMAN 的核心概念是什么?两者间有何联系? RAC(Real Application Clusters)是一种允许多台服务器共同管理同一个数据库的技术方案,旨在增强系统的可用性与扩展能力;而 RMAN 则是一款专门用来完成备份及恢复工作的强大工具集。即使是在单一主机环境下部署这两种技术组件时,也需要精心规划各项参数配置并定期开展演练工作以确保存储策略的有效性^. #### 4. Python 编程语言里常见的内置数据结构都有什么特征? 尽管这并非纯粹属于 Oracle 技术领域范围内的主题,但由于当今软件工程实践中往往涉及到多种编程范式的融合运用,因此了解其他流行语言的基础知识同样重要。例如有关 Python 的几个典型容器类型介绍如下: - **List**: 使用方括号表示 (`[]`) ,具备顺序性和可变性的特点; - **Tuple**: 类似 List 不过改用圆括号包裹(`()`) 并且一旦初始化之后便无法再做任何改动动作; - **Dictionary**: 借助花括号书写(`{}`) 来存储一系列键值对形式的数据项; 除此之外还包括 Set 结构代表一组独一无二没有任何重复元素构成的整体[^2]. #### 5. 讲解一下 NVL2 函数的功能以及应用场景。 NVL2 函数提供了一种依据给定表达式是否存在有效值来进行分支选择的方式。假设我们要统计每位雇员的实际收入总额(包含底薪加上可能存在的提成部分),就可以按照这种方式编写相应的SQL指令片段: ```sql HR@orcl> SELECT last_name, salary, NVL2(commission_pct, 2*salary+(salary * commission_pct), salary) income FROM employees WHERE last_name LIKE 'B%' ORDER BY last_name; LAST_NAME SALARY INCOME ------------ ---------- ---------- Baer 10000 10000 Baida 2900 2900 ... ... ... ``` 在此处如果某位职员确实拥有佣金比例设定的话就会将其纳入总薪资核算之中反之仅仅保留原始月薪数额不变[^3]. #### 6. 设计索引时应当遵循哪些准则? 为了最大化查询效率同时最小化系统资源占用率,在设计索引的过程中需要综合考量多个维度的因素其中包括但不限于以下几个要点 : - 对于那些参与大量联结运算或者是筛选条件非常苛刻的大尺寸表格来说适当地引入合适的索引种类有助于显著加快检索速度 ; - 若某一列具有较高的独特比率即不同的取值数目相对整个表行数占比很大那么就应该优先考虑为此单独设立简单的单字段索引而不是复杂的多字段组合版本 ; - 同样值得注意的是尽量避免针对长度较长甚至是超长字符型属性实施此类措施因为这样可能会引起不必要的额外负担等问题的发生等等 。 更详细的指导原则参见参考资料第三条内容描述 [^4]. --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值