Oracle面试题整理

news2024/11/26 12:41:07

目录

Oracle面试题整理

1.MySQL和Oracle的区别:

2.Oracle中function和procedure的区别? 

3. 比较truncate和delete命令 ? 

4.oralce中 rowid, rownum的定义 

5. 事务的特性(ACID)是指什么

6. 列举几种表连接方式

7. 描述oracle中tablespace和datafile之间的关系

8. 什么是逻辑备份

9. 什么是物理备份

10. NVL与NVL2两个函数的使用方法和差别?

11.union和union all的区别

12. minus和intersect区别

13.什么是存储过程,优点是什么?

14.什么是三范式

15.什么是视图?以及视图的使用场景有哪些?

16.索引是什么?有什么作用以及优缺点?

17.数据库的乐观锁和悲观锁是什么?

18.数据库结构优化1)范式优化:

 19.解释oralce中的游标

20.描述oracle中的触发器

21.  使用oracle 伪列删除表中重复记录: 

22.列出所有员工的姓名及其直接上级的姓名。

23.列出受雇日期早于其直接上级的所有员工。

24.列出最低薪金大于1500的各种工作。

25.列出所有员工的年工资,按年薪从低到高排序。 

26.列出与“SCOTT”从事相同工作的所有员工。

27.删除10号部门薪水最高的员工。

28.将薪水最高的员工的薪水降30%。

29.示出薪水最高人的职位。

30.查询员工姓名,工资和 工资级别(工资>=3000 为3级,工资>2000 为2级,工资<=2000 为1级)

31.语法:case … when … then … when … then … else … end

32. Oracle中的分页

33.一个叫department的表,里面只有一个字段name,一共有4条纪录,分别是a,b,c,d,对应四个球对,现在四个球对进行比赛,用一条sql语句显示所有可能的比赛组合.


Oracle面试题整理

1.MySQL和Oracle的区别:

  1. MySQL是开源的项目,免费。中小企业首选MySQL,Oracle是Oracle公司推出的一款成熟的数据库产品是闭源同时也是收费的,但是Oracle官网是不限制下载的(只要你有账号)一般的开发测试是没问题。
  2. SQL语法的不同,MySQL较为灵活,Oracle较为严格(具体就是单引号,分页的处理,主键的自动增长)
  3. 对于事务的支持。MySQL对于事务默认是不支持的,只有存储引擎innodb支持。而Oracle对于事务是完全支持。
  4. 并发性。MySql默认表级锁,Oracle行级锁,所以oracle并发行高很多。

2.Oracle中function和procedure的区别? 

1). 函数function是存储过程的一种 
2). 函数可以没有参数,但是一定需要一个返回值,存储过程可以没有参数,不需要返回值 
3). 函数return返回值没有返回参数模式,存储过程通过out参数返回值, 如果需要返   回多个参数则建议使用存储过程 
4). 在sql数据操纵语句中只能调用函数而不能调用存储过程

 3. 比较truncate和delete命令 ? 


1). Truncate 和delete都可以将数据实体删掉,truncate 的操作并不记录到 rollback日志,所以操作速度较快,但同时这个数据不能恢复 
2). Delete操作不腾出表空间的空间 
3). Truncate 不能对视图等进行删除 
4). Truncate是数据定义语言(DDL),而delete是数据操纵语言(DML) 

4.oralce中 rowid, rownum的定义 

1). rowid和rownum都是伪列 
2). rowid是物理地址,用于定位oracle中具体数据的物理存储位置 
3). rownum则是sql的输出结果排序

5. 事务的特性(ACID)是指什么

事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持久性)属性。

1)原子性(Atomic):事务中的各项操作,要么全做要么全不做,任何一项操作的失败都会导致整个事务的失败

2)一致性(Consistent):事务结束后系统状态是一样的

3)隔离性(Isolated):并发执行的事务彼此无法看到对方的中间状态

4)持久性(Durable):事务完成后,即使发生灾难性的故障,通过日志和同步备份可以在故障发生后重建数据

6. 列举几种表连接方式

等值连接(内连接)、非等连接、自连接、外连接(左、右、全)

内连接又称等值连接,筛选完全匹配的行

左连接以左表为主,筛选完全匹配的行之外还会把左表中没有匹配的行也筛选,找不到匹配的数据用null填充

右连接以右表为主,筛选完全匹配的行之外还会把有表中没有匹配的行也帅选,找不到匹配的数据用null填充

  7. 描述oracle中tablespace和datafile之间的关系


一个表空间可包含一个或多个数据文件。表空间利用增加或扩展数据文件扩大表空间,表空间的大小为组成该表空间的数据文件大小的和。一个datafile只能属于一个表空间;一个tablespace可以有一个或多个datafile,每个datafile只能在一个tablespace内, table中的数据,通过hash算法分布在tablespace中的各个datafile中,tablespace是逻辑上的概念,datafile则在物理上储存了数据库的种种对象。

   8. 什么是逻辑备份

1) 逻辑备份(exp/imp)用于实现数据库对象的恢复。但不是基于时间点可完全恢复的备份策略。只能作为联机备份和脱机备份的一种补充。
2) 完全逻辑备份
完全逻辑备份是将整个数据库导出到一个数据库的格式文件中,该文件可以在不同的数据库版本、操作系统和硬件平台之间进行移植。
3) 指定表的逻辑备份
通过备份工具,可以将指定的数据库表备份出来,这可以避免完全逻辑备份所带来的时间和财力上的浪费。

9. 什么是物理备份


物理备份是最主要的备份方式。用于保证数据库在最小的数据库丢失或没有数据丢失的情况下得到恢复.物理备份分为热备份和冷备份

  1) 热备份:主要是指备份过程在数据库打开并且用户可以使用的情况下进行。需要执行热物理备份的情况有:由于数据库性质要求不间断工作,因而此时只能采用热物理备份。

2) 冷备份:冷物理备份提供了最简单和最直接的方法保护数据库因物理损坏丢失。

对一个已经存在大最数据量的数据库,在晚间数据库可以关闭,此时应用冷物理。

当对数据库服务器进行升级,(如更换硬盘),此时需要备份数据库信息需要采用冷备。

10. NVL与NVL2两个函数的使用方法和差别?

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

11.union和union all的区别

1) UNION:由每一个查询 选择的 全部不反复的行组成。并集不包括反复值, 默认按第 1 个查询的第 1 列升序排列。

2) UNION ALL: 由每一个查询 选择的 全部的行。全然并集包括反复值。 不排序。

12. minus和intersect区别

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

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

13.什么是存储过程,优点是什么?

存储过程就像我们编程语言中的函数一样,封装了我们的代码(PLSQL、T-SQL)。存储过程的优点:

  1. 能够将代码封装起来保存在数据库之中
  2. 让编程语言进行调用
  3. 存储过程是一个预编译的代码块,执行效率比较高
  4. 一个存储过程替代大量T_SQL语句 ,可以降低网络通信量,提高通信速率

14.什么是三范式

第一范式:字段是最小的的单元不可再分

第二范式:满足第一范式,表中的字段必须完全依赖于全部主键而非部分主键。

第三范式:满足第二范式,非主键外的所有字段必须互不依赖既不存在传递依赖

15.什么是视图?以及视图的使用场景有哪些?

  1. 视图是一种基于数据表的一种虚表
  2. 视图建立在已有表的基础上, 视图赖以建立的这些表称为基表
  1. 向视图提供数据内容的语句为 SELECT 语句,可以将视图理解为存储起来的 SELECT 语句
  2. 视图向用户提供基表数据的另一种表现形式
  3. 视图没有存储真正的数据,真正的数据还是存储在基表中
  4. 程序员虽然操作的是视图,但最终视图还会转成操作基表
  5. 一个基表可以有0个或多个视图

16.索引是什么?有什么作用以及优缺点?

(1)是一种快速查询表中内容的机制,类似于新华字典的目录

(2)运用在表中某个些字段上,但存储时,独立于表之外

优缺点:

  1. 索引加快数据库的检索速度
  2. 索引降低了插入、删除、修改等维护任务的速度(虽然索引可以提高查询速度,但是它们也会导致数据库系统更新数据的性能下降,因为大部分数据更新需要同时更新索引)
  3. 唯一索引可以确保每一行数据的唯一性,通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能
  4. 索引需要占物理和数据空间

17.数据库的乐观锁和悲观锁是什么?

确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性,乐观锁和悲观锁是并发控制主要采用的技术手段。

悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作.在查询数据的时候就把事务锁起来,直到提交事务.实现方式:使用数据库中的锁机制。

 执行select xxx for update操作时,数据会被锁定,只有执行commitrollback才会释放.执行select xxx for update nowait操作时,数据也会被锁定,其他人访问时或返回ORA-00054错误,内容是资源正忙,需要采取相应的业务措施进行处理。

乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。在修改数据的时候把事务锁起来,通过version的方式来进行锁定.实现方式:使用version版本或者时间戳.

1):在数据取得的时候把整个数据都copy到应用中,在进行提交的时候比对当前数据库中的数据和开始的时候更新前取得的数据。当发现两个数据一模一样以后,就表示没有冲突可以提交,否则就是并发冲突,需要去用业务逻辑进行解决。

2):新增一个TableColumn,这个column是采用timestamp型,存储数据最后更新的时间。这种Timestamp的数据精度在Oracle的时间类型中是最高的,精确到微秒,是在更新提交的时候检查当前数据库中数据的时间戳和自己更新前取到的时间戳进行对比,如果一致则OK,否则就是版本冲突。

18.数据库结构优化1)范式优化:

1)比如消除冗余(节省空间)

2)反范式优化:比如适当加冗余等(减少join)

3)拆分表: 垂直拆分和水平拆分

19.解释oralce中的游标

游标就是指向一个结果集的记录定位器(指示器),用于定位记录。游标的使用方式:声明游标,打开游标,提取游标数据,关闭游标

Declare

 cursor cur is select * from category;

    record category%rowtype;

  begin

    open cur;

    loop

      fetch cur into record;

      if cur%notfound then

        exit;

      end if;

      dbms_output.put_line(to_char(record.id) || ',' || record.name);

    end loop;

    close cur;

 end;

20.描述oracle中的触发器

触发器是一种特殊的存储过程,存储过程由用户显式调用,而触发器是当用户对表

进行update,delete,insert是自动调用。触发器类型通常包括(插入,删除,修改)

CREATE OR REPLACE TRIGGER SAL_EMP

 BEFORE UPDATE ON scott.EMP

 FOR EACH ROW

BEGIN

 IF :OLD.SAL > :NEW.SAL THEN

  DBMS_OUTPUT.PUT_LINE('工资减少');

 ELSIF :OLD.SAL < :NEW.SAL THEN

  DBMS_OUTPUT.PUT_LINE('工资增加');

 ELSE

  DBMS_OUTPUT.PUT_LINE('工资未作任何变动');

 END IF;

 DBMS_OUTPUT.PUT_LINE('更新前工资 :' || :OLD.SAL);

 DBMS_OUTPUT.PUT_LINE('更新后工资 :' || :NEW.SAL);

END;

测试代码:

UPDATE scott.emp SET sal = 3000 WHERE empno = '7788';

21.  使用oracle 伪列删除表中重复记录: 


delete  table  t  where t.rowid not in

(select  max(t1.rowid)  from  table1 t1 where  t1.name=t.name)

根据表结构scott.emp如下图:

22.列出所有员工的姓名及其直接上级的姓名。


分析:表自映射,为表起别名,进行关联  t1 表模拟员工表 t2 表保存直接上级信息
select t1.ename 员工姓名, t2.ename 直接上级 from emp t1,emp t2 where t1.MGR = t2.empno;

23.列出受雇日期早于其直接上级的所有员工。


select t1.*,t2.hiredate from emp t1,emp t2 where t1.MGR = t2.empno and t1.hiredate < t2.hiredate;

24.列出最低薪金大于1500的各种工作。


分析:工作的最低薪金 —- 按工作分组,求最低薪金
select min(sal) from emp group by job;
大于1500 是一个分组条件 — having 
select job,min(sal) from emp group by job having min(sal) > 1500;

25.列出所有员工的年工资,按年薪从低到高排序。 


select ename, sal*12 from emp order by sal*12 asc;

26.列出与“SCOTT”从事相同工作的所有员工。


分析:先用子查询查出SCOTT的工作 : select job from emp where ename =’SCOTT';
   select * from emp where ename <> ‘SCOTT’ and job = (select job from emp where     ename =’SCOTT’);

27.删除10号部门薪水最高的员工。

delete from emp where deptno=10 and sal >= all(select sal from emp where deptno=10 ); // MYSQL 不支持
Mysql 规范,修改或者删除 表中记录,不允许在子查询中 查询相同表
mysql解决方案:临时表
delete from emp where deptno=10 and sal >= all(select t.sal from (select sal from emp where deptno=10) t );

28.将薪水最高的员工的薪水降30%。

oracle:update emp set sal = sal*0.7 where sal = (select max(sal) from emp);
mysql:  update emp set sal = sal*0.7 where sal = (select t.maxsal  from (select max(sal) maxsal from emp) t);

29.示出薪水最高人的职位。

select job from emp where sal = (select max(sal) from emp);
select job from emp where sal >= all(select sal from emp);

30.查询员工姓名,工资和 工资级别(工资>=3000 为3级,工资>2000 为2级,工资<=2000 为1级)


分析:

select ename,sal, case when sal>=3000 then ‘3级’ when sal>2000 then ‘2级’ else ‘1级’ end 级别 from emp;

31.语法:case … when … then … when … then … else … end

行列互换
姓名 课程 分数

张三 语文 74

张三 数学 83

张三 物理 93

李四 语文 74

李四 数学 84

李四 物理 94

变成(得到如下结果):

姓名 语文 数学 物理

—- —- —- —-

李四 74   84   94

张三 74   83   93

——————-

select name,max(case when cource =’语文’ then score else 0 end) from scores group by name;

select name,max(case when cource =’语文’ then score else 0 end)  语文,max(case when cource =’数学’ then score else 0 end) 数学,
max(case when cource =’英语’ then score else 0 end) 英语  from scores group by name;

32. Oracle中的分页

  1. 使用rownum函数
SELECT *

FROM (SELECT ROWNUM AS rowno,r.*

           FROM(SELECT * FROM tmp t  ORDER BY id desc

                   ) r

           where ROWNUM <= page*size

          ) a

WHERE a.rowno > (page-1)*size

  1. 使用row_number()over()函数
  Select * from (

  Select * ,row_number() over(order by id desc) num

  ) a where num between (page-1)*size and page*size

33.一个叫department的表,里面只有一个字段name,一共有4条纪录,分别是a,b,c,d,对应四个球对,现在四个球对进行比赛,用一条sql语句显示所有可能的比赛组合.

select a.name, b.name
from team a, team b
where a.name < b.name

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/51999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计springboot天狗电子商城系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

plink2.0和plink1.9的忧伤笔记

虽然plink2.0已经存在好久了&#xff0c;但是一直用的都是plink1.9&#xff0c;因为语法熟悉。更主要是plink2.0语法变动太大&#xff0c;害怕步子迈得太大了…… 今天看一下plink2.0的读入和输出数据常用参数&#xff0c; plink2.0用是不会用的&#xff0c;2022年都不会用&am…

计算机网络基础

前言 计算机网络学习的核心内容就是网络协议的学习。网络协议是为计算机网络中进行数据交换而建立的规则、标准或者说是约定的集合。因为不同用户的数据终端可能采取的字符集是不同的&#xff0c;两者需要进行通信&#xff0c;必须要在一定的标准上进行。一个很形象地比喻就是…

平时健身买什么耳机好、分享五款最好的运动耳机推荐

不少人喜欢在健身房或者户外运动中使用手机或者MP3来听音乐&#xff0c;这种方式不仅可以减少运动中的枯燥感&#xff0c;而且那些节奏较强的音乐还能够进一步激发人们的运动潜能&#xff0c;达到事半功倍的效果。作为音乐传递的桥梁&#xff0c;一款佩戴舒适的运动耳机是必不可…

又撸了一个开源项目!!!

花了两周左右&#xff0c;写了一个客户关系管理系统&#xff0c;基于 Vue Go 实现&#xff0c;主要功能有仪表盘、客户管理、合同管理、产品管理&#xff0c;订阅等功能。 前几天已经在 Github 上开源了&#xff0c;今天也把项目部署到云服务器上了&#xff0c;很完美&#x…

负载均衡组件Ribbon核心-@LoadBalanced-上

引言 书接上篇 微服务负载均衡小能手-Ribbon 使用RIbion实现负载均衡远程调用 Bean LoadBalanced public RestTemplate restTemplate(){return new RestTemplate(); } 都知道没有LoadBalanced注解前&#xff0c;RestTemplate就是一个简单的http请求工具类&#xff0c;贴上该…

AI-多模态-2021:DALL-E模型【文本生成图像工具】【OpenAI】

Dall-e&#xff1a;从拟物文字到图片的创造 人类不断地从五种感官接收和整合信息&#xff0c;通过视觉、听觉、触觉、嗅觉和味觉等生物信息来理解文字和图片。然而文字和图片属于符号&#xff0c;Dall-e模型在理解符号的含义时并不能通过生物信息的传递。通过将对自然语言的理…

Ambari-yarn-timeline 内置 HBase数据表清理

HDP 集群 timeline 内置的 HBase 数据表持续增大&#xff0c;我们将默认TTL30改 为7 天。 ambari界面YARN 服务中 的 timeline v2.0 timeline 内置 HBase数据HDFS路径 &#xff1a; 表在HDFS上的大小 使用如下命令进入 Hbase shell [hdfswinner-backup-hdp root]$ hbase -…

网站变灰代码如何让网页变灰

1.网站变灰代码应用场景 一般在清明节&#xff0c;全国哀悼日&#xff0c;大地震的日子&#xff0c;以及一些影响力很大的伟人逝世或纪念日的时候&#xff0c;身为站长的我们都会让自己的网站的全部网页变成灰色&#xff08;黑白色&#xff09;&#xff0c;以表示我们对逝者的…

数据分析之人力资源管理驾驶舱

驾驶舱是数据分析报表中用于展示关键分析指标和综合展示数据情况的&#xff0c;因此需要展示的内容多&#xff0c;需要做的内容甄选也多。 一 前言 人力资源作为企业的关键生产力&#xff0c;是一个企业成长发展的根本。随着“知识经济”时代的到来、市场竞争的加剧&#xff…

Shiro-全面详解(学习总结---从入门到深化)

Shiro介绍_Shiro简介 Shiro是apache旗下的一个开源安全框架&#xff0c;它可以帮助我们完成身 份认证&#xff0c;授权、加密、会话管理等功能。它有如下特点&#xff1a; 1、易于理解的API 简单的身份认证&#xff0c;支持多种数据源 2、简单的授权和鉴权 3、简单的加密API 4、…

《机器学习实战》11.Apriori算法进行关联分析

目录 使用Apriori算法进行关联分析 1 关联分析 2 Apriori原理 3 使用Apriori算法来发现频繁集 3.1 生成候选项集 3.2 组织完整的Apriori算法 4 从频繁项集中挖掘关联规则 5 示例&#xff1a;发现国会投票中的模式 6 示例&#xff1a;发现毒蘑菇的相似特征 7 本章小结…

线上服务Java进程假死快速排查、分析

线上服务Java进程假死快速排查、分析 最近我们有一台服务器上的Java进程总是在运行个两三天后就无法响应请求了&#xff0c;具体现象如下&#xff1a; 请求业务返回状态码502&#xff0c;查看进程还在&#xff0c;意味着Java进程假死&#xff0c;无法响应请求了&#xff1b;该…

React18 基础入门API、JSX语法糖

文章目录一、react的一次使用react.development.jsreact-dom.development.jsReact.createElement()二、三个APIReact.createElement()ReactDOM.createRoot()root.render() 渲染页面三、JSX&#xff08;JavaScript Syntax Extension&#xff09;、babelbabelJSX使用注意事项一、…

mysql与磁盘的关系

1.如今一直在说mysql存储方式和磁盘的关系&#xff0c;但是现在都是硬盘存储啊 磁盘分为硬盘和软盘 硬盘结构&#xff08;机械硬盘和固态硬盘&#xff09;详解 硬盘的大小是使用"磁头数 x 柱面数 x 扇区数 x 每个扇区的大小 如下&#xff1a; 每个扇区的大小是固定的…

javaEE高阶---Spring MVC

一 : 什么是Spring MVC ? 1.1 概述 Spring MVC全称Spring Web MVC,又称为Spring Web,它是一个原始的基于Servlet API 的 web 框架.Q : 经典问题 : Spring/Spring Boot/Spring MVC 有什么区别 ? A : Spring&#xff0c;一般指代的是Spring Framework&#xff0c;它是一个开源…

业务数据分析-常见业务指标

目录 1、什么是指标&#xff1f; 2、以互联网电商数据为例分析常用的指标 3、如何选择指标 4、电商指标体系详细介绍 1、什么是指标&#xff1f; 我们说过分析的最终目的就是为了通过客观的数据去发现公司业务存在的问题&#xff0c;那怎么通过什么数据呢&#xff1f;业务…

连接MySQL问题的错题小集

目录 一. 连接不上数据库 踩坑 解决过程 二. Can‘t connect to MySQL server on ‘localhost:3306‘ (10061) 排查1&#xff1a;数据库没有启动 排查2&#xff1a;判断数据库是否存在 排查3&#xff1a;数据库没有启动 ​编辑 过程&#xff1a; 报错了&#xff0c;排…

12.Java 技术栈中间件优雅停机方案设计与实现全景图

Java 技术栈中间件优雅停机方案设计与实现全景图 本系列 Netty 源码解析文章基于 4.1.56.Final 版本 本文概要 在上篇文章 中笔者为大家详细介绍了 Netty 在处理连接关闭时的完整过程&#xff0c;并详细介绍了 Netty 如何应对 TCP 连接在关闭时会遇到的各种场景。 在连接关闭…

软件压力测试有哪些测试流程?软件测试报告收费情况

软件压力测试是一种基本的质量保证行为&#xff0c;它是每个重要软件测试工作的一部分。通过给软件系统不断施压&#xff0c;强制其在极限条件下运行&#xff0c;以观察软件系统可运行到哪种程度&#xff0c;从而发现系统性能缺陷。测试人员根据测试过程进行总结和分析&#xf…