百度
360搜索
搜狗搜索

oracle面试题及答案,oracle数据库面试题详细介绍

本文目录一览: Oracle面试题 求解答

8、
select CHARGE_MAN,sum(nvl(CHARGE_TOTAL,0)) C1
from rcs_znj_2007
group by CHARGE_MAN
9、
select * from char_list order by DISP_ORDER asc
10、
select t1.ID, t1.METERNO, t2.LIST_STRING, t1.CHARGE_DATE, t1.CHARGE_TOTAL, t1.CHARGE_MAN
from rcs_znj_2007 t1, char_list t2
where t1.ADJ_TYPE=t2.LIST_CHAR
order by t1.ADJ_TYPE asc
11、
因为不知道你的表rcs_znj_2007的字段ADJ_TYPE是否为varchar2类型没有,若是int类型的话,则得先更改表结构才能进行update(若已是varchar2类型且长度已经够的话则不用更改):
--更改表结构:
alter table rcs_znj_2007 modify ADJ_TYPE varchar2(20)--长度及类型要与char_list表中的字段LIST_STRING相同
--进行关联更新表数据:
update rcs_znj_2007 t1
set t1.ADJ_TYPE=(select LIST_STRING from char_list where LIST_CHAR=t1.ADJ_TYPE)
where exists (select 1 from char_list where LIST_CHAR=t1.ADJ_TYPE)
vinson_shen完全回答了,很准确
trukey 完全正确
8. 汇总统计收款总金额(CHARGE_TOTAL)按各收费员(CHARGE_MAN)分别汇总,结果如下所示:
CHARGE_MAN C1
0006 3065.66
测试61 144153
李世民 85
SQL:select CHARGE_MAN,sum(CHARGE_TOTAL) as C1 from rcs_znj_2007 order by CHARGE_MAN
9. 按照DISP_ORDER升序显示CHAR_LIST表数据内容
SQL:select * from char_list order by DISP_ORDER
10. 按照ADJ_TYPE(减免类别)升序,显示RCS_ZNJ_2007表所有内容,其中ADJ_TYPE字段须转换成对应的中文字符(CHAR_LIST.LIST_STRING)。(两表关联查询)
SQL: select ID,METERNO,
(select LIST_STRING from CHAR_LIST where LIST_CHAR = ADJ_TYPE) as ADJ_NAME,
CHARGE_DATE,
CHARGE_TOTAL,CHARGE_MAN
from RCS_ZNJ_2007 order by ADJ_TYPE
11. 根据CHAR_LIST表内容,将RCS_ZNJ_2007表中ADJ_TYPE字段值全部更新成对应的中文字符(CHAR_LIST.LIST_STRING)。
SQL: update RCS_ZNJ_2007 set ADJ_TYPE = (select LIST_STRING from CHAR_LIST where LIST_CHAR = ADJ_TYPE)

Oracle面试题(基础篇)

Oracle面试题(基础篇)
  Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。以下是关于Oracle面试题(基础篇),希望大家认真阅读!

  1. Oracle跟SQL Server 2005的区别?
  宏观上:
  1). 最大的区别在于平台,oracle可以运行在不同的平台上,sql server只能运行在windows平台上,由于windows平台的稳定性和安全性影响了sql server的稳定性和安全性
  2). oracle使用的脚本语言为PL-SQL,而sql server使用的脚本为T-SQL
  微观上: 从数据类型,数据库的结构等等回答
  2. 如何使用Oracle的游标?
  1). oracle中的游标分为显示游标和隐式游标
  2). 显示游标是用cursor...is命令定义的游标,它可以对查询语句(select)返回的多条记录进行处理;隐式游标是在执行插入 (insert)、删除(delete)、修改(update)和返回单条记录的查询(select)语句时由PL/SQL自动定义的。
  3). 显式游标的操作:打开游标、操作游标、关闭游标;PL/SQL隐式地打开SQL游标,并在它内部处理SQL语句,然后关闭它
  3. Oracle中function和procedure的区别?
  1). 可以理解函数是存储过程的一种
  2). 函数可以没有参数,但是一定需要一个返回值,存储过程可以没有参数,不需要返回值
  3). 函数return返回值没有返回参数模式,存储过程通过out参数返回值, 如果需要返回多个参数则建议使用存储过程
  4). 在sql数据操纵语句中只能调用函数而不能调用存储过程
  4. Oracle的导入导出有几种方式,有何区别?
  1). 使用oracle工具 exp/imp
  2). 使用plsql相关工具
  方法1. 导入/导出的是二进制的数据, 2.plsql导入/导出的是sql语句的文本文件
  5. Oracle中有哪几种文件?
  数据文件(一般后缀为.dbf或者.ora),日志文件(后缀名.log),控制文件(后缀名为.ctl)
  6. 怎样优化Oracle数据库,有几种方式?
  个人理解,数据库性能最关键的因素在于IO,因为操作内存是快速的,但是读写磁盘是速度很慢的,优化数据库最关键的问题在于减少磁盘的IO,就个人理解应该分为物理的和逻辑的优化, 物理的是指oracle产品本身的一些优化,逻辑优化是指应用程序级别的优化
  物理优化的一些原则:
  1). Oracle的运行环境(网络,硬件等)
  2). 使用合适的优化器
  3). 合理配置oracle实例参数
  4). 建立合适的索引(减少IO)
  5). 将索引数据和表数据分开在不同的表空间上(降低IO冲突)
  6). 建立表分区,将数据分别存储在不同的分区上(以空间换取时间,减少IO)
  逻辑上优化:
  1). 可以对表进行逻辑分割,如中国移动用户表,可以根据手机尾数分成10个表,这样对性能会有一定的作用
  2). Sql语句使用占位符语句,并且开发时候必须按照规定编写sql语句(如全部大写,全部小写等)oracle解析语句后会放置到共享池中
  如: select * from Emp where name=? 这个语句只会在共享池中有一条,而如果是字符串的话,那就根据不同名字存在不同的语句,所以占位符效率较好
  3). 数据库不仅仅是一个存储数据的地方,同样是一个编程的地方,一些耗时的操作,可以通过存储过程等在用户较少的情况下执行,从而错开系统使用的高峰时间,提高数据库性能
  4). 尽量不使用*号,如select * from Emp,因为要转化为具体的列名是要查数据字典,比较耗时
  5). 选择有效的表名
  对于多表连接查询,可能oracle的优化器并不会优化到这个程度, oracle 中多表查询是根据FROM字句从右到左的数据进行的,那么最好右边的表(也就是基础表)选择数据较少的表,这样排序更快速,如果有link表(多对多中间表),那么将link表放最右边作为基础表,在默认情况下oracle会自动优化,但是如果配置了优化器的情况下,可能不会自动优化,所以平时最好能按照这个方式编写sql
  6). Where字句 规则
  Oracle 中Where字句时从右往左处理的,表之间的连接写在其他条件之前,能过滤掉非常多的数据的条件,放在where的末尾, 另外!=符号比较的列将不使用索引,列经过了计算(如变大写等)不会使用索引(需要建立起函数), is null、is not null等优化器不会使用索引
  7). 使用Exits Not Exits 替代 In Not in
  8). 合理使用事务,合理设置事务隔离性
  数据库的数据操作比较消耗数据库资源的,尽量使用批量处理,以降低事务操作次数
  7. Oracle中字符串用什么符号链接?
  Oracle中使用 || 这个符号连接字符串 如 ‘abc’ || ‘d’
  8. Oracle分区是怎样优化数据库的`?
  Oracle的分区可以分为:列表分区、范围分区、散列分区、复合分区。
  1). 增强可用性:如果表的一个分区由于系统故障而不能使用,表的其余好的分区仍可以使用;
  2). 减少关闭时间:如果系统故障只影响表的一部份分区,那么只有这部份分区需要修复,可能比整个大表修复花的时间更少;
  3). 维护轻松:如果需要得建表,独产管理每个公区比管理单个大表要轻松得多;
  4). 均衡I/O:可以把表的不同分区分配到不同的磁盘来平衡I/O改善性能;
  5). 改善性能:对大表的查询、增加、修改等操作可以分解到表的不同分区来并行执行,可使运行速度更快
  6). 分区对用户透明,最终用户感觉不到分区的存在。
  9. Oracle是怎样分页的?
  Oracle中使用rownum来进行分页, 这个是效率最好的分页方法,hibernate也是使用rownum来进行oralce分页的
  select * from
  ( select rownum r,a from tabName where rownum <= 20 )
  where r > 10
  10. Oralce怎样存储文件,能够存储哪些文件?
  Oracle 能存储 clob、nclob、 blob、 bfile
  Clob 可变长度的字符型数据,也就是其他数据库中提到的文本型数据类型
  Nclob 可变字符类型的数据,不过其存储的是Unicode字符集的字符数据
  Blob 可变长度的二进制数据
  Bfile 数据库外面存储的可变二进制数据
  11. Oracle中使用了索引的列,对该列进行where条件查询、分组、排序、使用聚集函数,哪些用到了索引?
  均会使用索引, 值得注意的是复合索引(如在列A和列B上建立的索引)可能会有不同情况
  12. 数据库怎样实现每隔30分钟备份一次?
  通过操作系统的定时任务调用脚本导出数据库
  13. Oracle中where条件查询和排序的性能比较?
  Order by使用索引的条件极为严格,只有满足如下情况才可以使用索引,
  1). order by中的列必须包含相同的索引并且索引顺序和排序顺序一致
  2). 不能有null值的列
  所以排序的性能往往并不高,所以建议尽量避免order by
  14. 解释冷备份和热备份的不同点以及各自的优点?
  冷备份发生在数据库已经正常关闭的情况下,将关键性文件拷贝到另外位置的一种说法
  热备份是在数据库运行的情况下,采用归档方式备份数据的方法
  冷备的优缺点:
  1).是非常快速的备份方法(只需拷贝文件)
  2).容易归档(简单拷贝即可)
  3).容易恢复到某个时间点上(只需将文件再拷贝回去)
  4).能与归档方法相结合,作数据库“最新状态”的恢复。
  5).低度维护,高度安全。
  冷备份不足:
  1).单独使用时,只能提供到“某一时间点上”的恢复。
  2).在实施备份的全过程中,数据库必须要作备份而不能作其它工作。也就是说,在冷备份过程中,数据库必须是关闭状态。
  3).若磁盘空间有限,只能拷贝到磁带等其它外部存储设备上,速度会很慢。
  4).不能按表或按用户恢复。
  热备的优缺点
  1).可在表空间或数据文件级备份,备份时间短。
  2).备份时数据库仍可使用。
  3).可达到秒级恢复(恢复到某一时间点上)。
  4).可对几乎所有数据库实体作恢复。
  5).恢复是快速的,在大多数情况下在数据库仍工作时恢复。
  热备份的不足是:
  1).不能出错,否则后果严重。
  2).若热备份不成功,所得结果不可用于时间点的恢复。
  3).因难于维护,所以要特别仔细小心,不允许“以失败而告终”。
  15. 解释data block , extent 和 segment的区别?
  data block 数据块,是oracle最小的逻辑单位,通常oracle从磁盘读写的就是块
  extent 区,是由若干个相邻的block组成
  segment段,是有一组区组成
  tablespace表空间,数据库中数据逻辑存储的地方,一个tablespace可以包含多个数据文件
;

阅读更多 >>>  oneplus6t是什么手机

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面试题

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数据库面试题

1、b没有访问表employee的权限,或者有权限但是在做desc时没有加用户名在表前面。
2、在建表时设置了max extent参数导致了表extent数满了之后不能再进行扩展。
3、tablespace full表示该表空间没有可扩展的块了,这是设置了datafile为autoextend off后或者系统中没有可扩展的物理空间导致。
4、首先我需要有一张主表(pri)拥有关键字段(id),然后分两种情况,一种是目标表不存在的情况那么我需要建立目标表,如:create table oerder(id not null,aa char(8),id_p int, primary key(id),forergn key (id_p) references pri(id));。另一种情况是目标表存在,则增加约束条件:alter table order add foreign key (id_p) references pri(id);
5、pct_increase代表的是表在做了第一次extent后,下次再扩展时的增量,它是一个百分比值,也就是说,如果你设置了该值为50那么在表下一次扩展时扩展量就增加为150%。这是个很“恐怖”的设置,如果你使用了它那么有可能你会发现你的表空间很快就没有可扩展的地方了。
6、英文不好,题目意思没读懂。
7、这题还是分两种情况,一种是nt server就是你的database server,那么你可能需要先在nt server上确认listener已经启动,然后进行ping和tracert看看是否是网络问题,最后检查pc上的tnsnames.ora配置文件是否正确,在pc上做tracerc看网络链接是否正常?检查pc上防火墙的设置等。如果nt server 不是你的database server那么说明你的database server的网络链接是正常的,那么需要的就是:检查pc上的tnsnames.ora配置文件是否正确,在pc上做tracerc看网络链接是否正常,检查pc上防火墙的设置等。当然还有一种比较特殊的情况,在pc安装了64位win操作系统+32位的oracle时会发生在cmd下可以进行链接,但是使用oracle的其他连接方式如客户端,oem等等就会报tns错误,这是oracle本身的bug。
8、char和varchar2最根本的区别就在于一个是固定长度,另一个是可变长度。它们对空间的占用量是不同的,在同样长度的字符下char类型的需要用空字符补充不足的字符数,而varchar2则不会。当然运行效率上char占优。
9、这个太长,懒得打了。
1、b没有访问表employee的权限,或者有权限但是在做desc时没有加用户名在表前面。
2、在建表时设置了max extent参数导致了表extent数满了之后不能再进行扩展。
3、tablespace full表示该表空间没有可扩展的块了,这是设置了datafile为autoextend off后或者系统中没有可扩展的物理空间导致。
4、首先我需要有一张主表(pri)拥有关键字段(id),然后分两种情况,一种是目标表不存在的情况那么我需要建立目标表,如:create table oerder(id not null,aa char(8),id_p int, primary key(id),forergn key (id_p) references pri(id));。另一种情况是目标表存在,则增加约束条件:alter table order add foreign key (id_p) references pri(id);
5、pct_increase代表的是表在做了第一次extent后,下次再扩展时的增量,它是一个百分比值,也就是说,如果你设置了该值为50那么在表下一次扩展时扩展量就增加为150%。这是个很“恐怖”的设置,如果你使用了它那么有可能你会发现你的表空间很快就没有可扩展的地方了。
6、英文不好,题目意思没读懂。
7、这题还是分两种情况,一种是nt server就是你的database server,那么你可能需要先在nt server上确认listener已经启动,然后进行ping和tracert看看是否是网络问题,最后检查pc上的tnsnames.ora配置文件是否正确,在pc上做tracerc看网络链接是否正常?检查pc上防火墙的设置等。如果nt server 不是你的database server那么说明你的database server的网络链接是正常的,那么需要的就是:检查pc上的tnsnames.ora配置文件是否正确,在pc上做tracerc看网络链接是否正常,检查pc上防火墙的设置等。当然还有一种比较特殊的情况,在pc安装了64位win操作系统+32位的oracle时会发生在cmd下可以进行链接,但是使用oracle的其他连接方式如客户端,oem等等就会报tns错误,这是oracle本身的bug。
8、char和varchar2最根本的区别就在于一个是固定长度,另一个是可变长度。它们对空间的占用量是不同的,在同样长度的字符下char类型的需要用空字符补充不足的字符数,而varchar2则不会。当然运行效率上char占优。
9、这个太长,懒得打了。

阅读更多 >>>  string数组转list,Java基础:数组Array转成List的几种方法

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面试题

create table scores (id integer,score integer);
1.随机生成100个人的成绩
begin
for i in 1 .. 100 loop
insert into scores select trunc(dbms_random.value(0,100),0),trunc(dbms_random.value(0,100),0) from dual;
end loop;
end;
/
2.统计出100-86为优秀、85到60为及格,59-0为不及格的人数
select
(select count(*) from scores where score between 86 and 100) "youxiu",
(select count(*) from scores where score between 60 and 85) "jige",
(select count(*) from scores where score between 0 and 59) "bujige"
from dual;
--创建表
create table scores (id integer,score integer);
--随机生成100个人的成绩
begin
for i in 1 .. 100 loop
insert into scores select trunc(dbms_random.value(0,100),0),trunc(dbms_random.value(0,100),0) from dual;
end loop;
end;
--创建函数
create or replace function querys(
score scores.score%type
)
return varchar2
as
begin
if score >= 86 and score <= 100 then
return score||'优秀';
elsif score >= 60 and score <= 85 then
return score||'及格';
elsif score >= 0 and score <= 59 then
return score||'不及格';
end if;
end;
--调用函数查询结果
select id,querys(score) from scores;
1.create table table_1
as
select lpad(rownum,6,'0') as id,
trunc(dbms_random.value(0,100)) as score
from dual
connect by rownum<=10000
2.
优秀人数:select count(*) from table_1 where score>=86
及格人数:select count(*) from table_1 where score<=85 and score>=60
不及格人数:select count(*) from table_1 where score<60
希望能帮到您。

阅读更多 >>>  html中transition什么意思的简单介绍

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面试题及答案,oracle数据库面试题"浏览人数已经达到19次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:oracle面试题及答案,oracle数据库面试题的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!