oracle基础命令面试题,Oracle面试题及答案整理,速速收藏

本文分享了一套Oracle数据库的面试题目,涵盖了SQL基础和高级知识,包括查询最高分、多值字段、复杂条件计数、时间跨度计算、汇总统计等。还涉及触发器、临时表、索引优化、SGA组件、分区表、数据库恢复策略等内容,适合准备数据库面试的读者参考。
摘要由CSDN通过智能技术生成

SQL专栏

SQL数据库基础知识汇总

SQL数据库高级知识汇总

好久没有给大家发面试题了,最近收集了一套Oracle的面试题,特地整理出来分享给大家,希望对你有帮助。

1、表:table1(FId,Fclass,Fscore),用最高效最简单的SQL列出各班成绩最高的列表,显示班级,成绩两个字段。

2、有一个表table1有两个字段FID,Fno,字都非空,写一个SQL语句列出该表中一个FID对应多个不同的Fno的纪录。

类如:

76b9c2b64ab003a1503b87c41fb4357a.png

结果:

a93d845cbe5d6a0d42a08509c78594b1.png

3、有员工表empinfo

(

Fempno varchar2(10) not null pk,

Fempname varchar2(20) not null,

Fage number not null,

Fsalary number not null

);

假如数据量很大约1000万条;写一个你认为最高效的SQL,用一个SQL计算以下四种人:

fsalary>9999 and fage > 35

fsalary>9999 and fage < 35

fsalary<9999 and="" fage="">35

fsalary<9999 and fage < 35

每种员工的数量;

4、表A字段如下

month person income

月份 人员 收入

要求用一个SQL语句(注意是一个)的处所有人(不区分人员)每个月及上月和下月的总收入

要求列表输出为

月份 当月收入 上月收入 下月收入

5,表B

63a42219d4eede2d411ef47ce0242a7c.png

要求的输出数据

93bbef3a732fce4086ab487bcb920ecc.png

试用一个Sql语句完成。

6,简述oracle行触发器的变化表限制表的概念和使用限制,行触发器里面对这两个表有什么限制。

7、oracle临时表有几种。

临时表和普通表的主要区别有哪些,使用临时表的主要原因是什么?

8,aa,bb表都有20个字段,且记录数量都很大,aa,bb表的X字段(非空)上有索引,

请用SQL列出aa表里面存在的X在bb表不存在的X的值,请写出认为最快的语句,并解译原因。

9,简述SGA主要组成结构和用途?

10、什么是分区表?简述范围分区和列表分区的区别,分区表的主要优势有哪些?

11,背景:某数据运行在archivelog,且用rman作过全备份和数据库的冷备份,

且所有的归档日志都有,现控制文件全部损坏,其他文件全部完好,请问该怎么恢复该数据库,说一两种方法。

12,有个表a(x number(20),y number(20))用最快速高效的SQL向该表插入从1开始的连续的1000万记录。

参考答案

1、

select

Fclass,

max(Fscore)

from table1

group by Fclass

2、

select * from table1

where FID in

(

select FID from table1

group by FID

having

count(Distinct Fno)>=2

)

3、

select

sum(case when fsalary>9999 and fage>35 then 1 else 0 end),

sum(case when fsalary>9999 and fage<35 then 1 else 0 end),

sum(case when fsalary<9999 and="" fage="">35 then 1 else 0 end),

sum(case when fsalary<9999 and fage<35 then 1 else 0 end)

from empinfo

4、

Select

(Select Month From Table Where Month = To_Char(Sysdate, 'mm')) 月份,

(Select Sum(Income) From Table Where Month = To_Char(Sysdate, 'mm')) 当月收入,

(Select Sum(Income) From Table Where To_Number(Month) = To_Number(Extract(Month From Sysdate)) - 1) 上月收入,

(Select Sum(Income) From Table Where To_Number(Month) = To_Number(Extract(Month From Sysdate)) + 1) 下月收入

From Dual

5、

select

nvl(c1,'合计'),

sum(c2)

from B

group by rollup(c1)

变化表mutating table

被DML语句正在修改的表

需要作为DELETE CASCADE参考完整性限制的结果进行更新的表也是变化的

限制:对于Session本身,不能读取正在变化的表

限制表constraining table

需要对参考完整性限制执行读操作的表

限制:如果限制列正在被改变,那么读取或修改会触发错误,但是修改其它列是允许的。

7.

在Oracle中,可以创建以下两种临时表:

a、会话特有的临时表

CREATE GLOBAL TEMPORARY ( )

ON COMMIT PRESERVE ROWS;

b、事务特有的临时表

CREATE GLOBAL TEMPORARY ( )

ON COMMIT DELETE ROWS;

CREATE GLOBAL TEMPORARY TABLE MyTempTable

所建的临时表虽然是存在的,但是你试一下insert 一条记录然后用别的连接登上去select,记录是空的,明白了吧。

下面两句话再贴一下:

--ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行)

--ON COMMIT PRESERVE ROWS 说明临时表是会话指定,当中断会话时ORACLE将截断表。

8.

select aa.x from aa

where not exists

(

select 'x' from bb

where aa.x = bb.x

) ;

以上语句同时使用到了aa中x的索引和的bb中x的索引

9.

SGA是Oracle为一个实例分配的一组共享内存缓冲区,它包含该实例的数据和控制信息。SGA在实例启动时被自动分配,当实例关闭时被收回。数据库的所有数据操作都要通过SGA来进行。

SGA中内存根据存放信息的不同,可以分为如下几个区域:

a、Buffer Cache:存放数据库中数据库块的拷贝。它是由一组缓冲块所组成,这些缓冲块为所有与该实例相链接的用户进程所共享。缓冲块的数目由初始化参数DB_BLOCK_BUFFERS确定,缓冲块的大小由初始化参数DB_BLOCK_SIZE确定。大的数据块可提高查询速度。它由DBWR操作。

b、日志缓冲区Redo Log Buffer:存放数据操作的更改信息。它们以日志项(redo entry)的形式存放在日志缓冲区中。当需要进行数据库恢复时,日志项用于重构或回滚对数据库所做的变更。日志缓冲区的大小由初始化参数LOG_BUFFER确定。大的日志缓冲区可减少日志文件I/O的次数。后台进程LGWR将日志缓冲区中的信息写入磁盘的日志文件中,可启动ARCH后台进程进行日志信息归档。

c、共享池Shared Pool:包含用来处理的SQL语句信息。它包含共享SQL区和数据字典存储区。共享SQL区包含执行特定的SQL语句所用的信息。数据字典区用于存放数据字典,它为所有用户进程所共享。

10.

使用分区方式建立的表叫分区表

范围分区

每个分区都由一个分区键值范围指定(对于一个以日期列作为分区键的表,“2005 年 1 月”分区包含分区键值为从“2005 年 1 月 1 日”

到“2005 年 1 月 31 日”的行)。

列表分区

每个分区都由一个分区键值列表指定(对于一个地区列作为分区键的表,“北美”分区可能包含值“加拿大”“美国”和“墨西哥”)。

分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。通常,分区可以使某些查询以及维护操作的性能大大提高。此外,分区还可以极大简化常见的管理任务。通过分区,数据库设计人员和管理员能够解决前沿应用程序带来的一些难题。分区是构建千兆字节数据系统或超高可用性系统的关键工具。

11.

一.使用冷备份,直接将冷备份的文件全部COPY到原先的目录下,在从新启动数据库就可以

二.使用归档日志,

1.启动数据库NOMOUNT

2.创建控制文件,控制文件指定数据文件和重做日志文件的位置.

3.使用RECOVER DATABASE using backup controlfile until cancel 命令回复数据库,这时可以使用归档日志

4.ALETER DATABASE OPEN RESETLOGS;

5.重新备份数据库和控制文件

12.

drop index idx_a;

insert /*+ append no_logging */ into a values(x,y)

select 1 from dual connect by level<1000001;

create index idx_a on a(x,y);

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值