ITPub博客

首页 > 数据库 > Oracle > 数据库面试题(转)

数据库面试题(转)

Oracle 作者:小小虾鱼 时间:2013-12-13 11:35:53 0 删除 编辑

根本:
  1. 数据笼统:物理笼统、见解笼统、视图级笼统,内模式、模式、中模式
  2. SQL语行包含数据界说、数据放置(Data Manipulation),数据节制(Data Control)
  数据界说:Create Table,Alter Table,Drop Table, Craete/Drop Index等
  数据放置:Select ,insert,update,delete,
  数据节制:grant,revoke
  3. SQL经常使用命令:
  CREATE TABLE Student(
  ID NUMBER PRIMARY KEY,
  NAME VARCHAR2(50) NOT NULL);//建表
  CREATE VIEW view_name AS
  Select * FROM Table_name;//建视图
  Create UNIQUE INDEX index_name ON TableName(col_name);//建索引
  INSERT INTO tablename {column1,column2,…} values(exp1,exp2,…);//插入
  INSERT INTO Viewname {column1,column2,…} values(exp1,exp2,…);//插入视图实践影响表
  UPDATE tablename SET name=’zang 3’ condition;//更新数据
  DELETE FROM Tablename WHERE condition;//删除
  GRANT (Select,delete,…) ON (对象) TO USER_NAME [WITH GRANT OPTION];//授权
  REVOKE (权限表) ON(对象) FROM USER_NAME [WITH REVOKE OPTION] //撤权
  列支工做职员及其领导的名字:
  Select E.NAME, S.NAME FROM EMPLOYEE E S
  WHERE E.SUPERName=S.Name
  4. 视图:
  5. 完备性约束:实体完备性、参照完备性、用户界说完备性
  6.什么是第三范式:
  1NF:每个属性是不行分的。
  2NF:若关系R是1NF,且每个非主属性皆完备函数依靠于R的键。例SLC(SID#, CourceID#, SNAME,Grade),则不是2NF;
  3NF:若R是2NF,且它的任何非键属性皆不通报依靠于任何候选键。
  7. ER(实体/接洽)模型
  8. 索引做用
  9. 事务:是一系列的数据库操做,是数据库使用的基本逻辑单位。事务性质:簿本性、
  簿本性。即不行朋分性,事务要么部分被实施,要么就部分不被实施。
  分歧性或可串性。事务的执使用得数据库从一种正确外形转换成另一种正确外形
  断尽性。在事务正确提交之前,不承诺把该事务对数据的任何改变提供给任何其他事务,
  持久性。事务正确提交后,其效果将永久保存在数据库中,即使在事务提交后有了其他弊端,事务的处理效果也会得到保存。
  10. 锁:共享锁、互斥锁
  两段锁协议:阶段1:加锁阶段 阶段2:解锁阶段
  11. 死锁及处理:事务循环等待数据锁,则会死锁。
  死锁处理:防御死锁协议,死锁恢复机制
  12. 存储过程:存储过程就是编译好了的一些sql语句。
  1.存储过程由于SQL语句已经预编绎过了,因此运行的速度斗劲快。
  2. 可包管数据的平安性和完备性。通过存储过程可以使出有权限的用户在节制之下间接天存取数据库,从而包管数据的平安。通过存储过程可以使相关的动做在一同收生收火,从而可以回护数据库的完备性。
  3.可以着落聚集的通疑量。存储过程主假定在管事器上运行,加少对客户机的压力。
  4:存储过程可以承受参数、输出参数、返回单个或多个效果集和返回值。可以背轨范返回错误本因
  5:存储过程可以包含轨范流、逻辑和对数据库的查询。同时可以实体封拆和躲躲了数据逻辑。
  13. 触收器: 当满足触收器条件,则系统主动实施触收器的触收体。
  触收工夫:有before,after.触收事务:有insert,update,delete三种。触收典范榜样:有行触收、语句触收
  14.内联接,中联接辨别?
  内邻接是包管两个表中一切的行皆要满足邻接条件,而中邻接则可则。
  在中邻接中,某些不满条件的列也会揭露出往,也就是说,只限定此中一个表的行,而不限定另一个表的行。分左邻接、右邻接、齐邻接三种

榜样查询:

 

       1.一道SQL语句面试题,关于group by
  表内容:
  2005-05-09 胜
  2005-05-09 胜
  2005-05-09 负
  2005-05-09 负
  2005-05-10 胜
  2005-05-10 负
  2005-05-10 负
  若是要天生以下效果, 该若何写sql语句?
  胜 负
  2005-05-09 2 2
  2005-05-10 1 2
  ------------------------------------------
  create table #tmp(rq varchar(10),shengfu nchar(1))
  insert into #tmp values("2005-05-09","胜")
  insert into #tmp values("2005-05-09","胜")
  insert into #tmp values("2005-05-09","负")
  insert into #tmp values("2005-05-09","负")
  insert into #tmp values("2005-05-10","胜")
  insert into #tmp values("2005-05-10","负")
  insert into #tmp values("2005-05-10","负")
  1)select rq, sum(case when shengfu="胜" then 1 else 0 end)"胜",sum(case when shengfu="负" then 1 else 0 end)"负" from #tmp group by rq
  2) select N.rq,N.胜,M.负 from (
  select rq,胜=count(*) from #tmp where shengfu="胜"group by rq)N inner join
  (select rq,负=count(*) from #tmp where shengfu="负"group by rq)M on N.rq=M.rq
  3)select a.col001,a.a1 胜,b.b1 负 from
  (select col001,count(col001) a1 from temp1 where col002="胜" group by col001) a,
  (select col001,count(col001) b1 from temp1 where col002="负" group by col001) b
  where a.col001=b.col001
  2.就教一个面试中逢到的SQL语句的查询成绩
  表中有A B C三列,用SQL语句实现:当A列大于B列时遴选A列可则遴选B列,当B列大于C列时遴选B列可则遴选C列。
  ------------------------------------------
  select (case when a>b then a else b end ),
  (case when b>c then b esle c end)
  from table_name
  3.面试题:一个日期鉴定的sql语句?
  请取出tb_send表中日期(SendTime字段)为当天的一切记载?(SendTime字段为datetime型,包含日期取工夫)
  ------------------------------------------
  select * from tb where datediff(dd,SendTime,getdate())=0
  4.有一张表,里面有3个字段:语文,数学,英语。此中有3笔记载离别默示语文70分,数学80分,英语58分,请用一条sql语句查询出这三笔记载并按以下条件揭露出往(并写出您的思路):
  大于或即是80默示优秀,大于或即是60默示及格,小于60分默示不及格。
  揭露花式:
  语文              数学                英语
  及格              优秀                不及格
  ------------------------------------------
  select
  (case when 语文>=80 then "优秀"
  when 语文>=60 then "及格"
  else "不及格") as 语文,
  (case when 数学>=80 then "优秀"
  when 数学>=60 then "及格"
  else "不及格") as 数学,
  (case when 英语>=80 then "优秀"
  when 英语>=60 then "及格"
  else "不及格") as 英语,
  from table
  5.在sqlserver2000中请用sql创建一张用户且自表和系统且自表,里面包含两个字段ID和IDValues,典范榜样皆是int型,并诠释下两者的辨别?
  ------------------------------------------
  用户且自表:create table #xx(ID int, IDValues int)
  系统且自表:create table ##xx(ID int, IDValues int)
  辨别:
  用户且自表只对创建这个表的用户的Session可见,对其他进程是不行见的.
  当创建它的进程消掉机这个且自表就主动删除.
  齐局且自表对整个SQL Server实例皆可见,然则一切拜候它的Session皆消掉的时辰,它也主动删除.
  6.sqlserver2000是一种大型数据库,他的存储容量只受存储介质的限定,请示它是通过什么编制实现这类无穷容量机制的。
  ------------------------------------------
  它的一切数据皆存储在数据文件中(*.dbf),所以只要文件够大,SQL    Server的存储容量是可以扩大的.
  SQL Server 2000 数据库有三品种型的文件:
  主要数据文件
  主要数据文件是数据库的起面,指背数据库中文件的其它部分。每个数据库皆有一个主要数据文件。主要数据文件的推荐文件扩大名是 .mdf。
  主要数据文件
  主要数据文件包含除主要数据文件中的一切数据文件。有些数据库可能出有主要数据文件,而有些数据库则有多个主要数据文件。主要数据文件的推荐文件扩大名是 .ndf。
  日志文件
  日志文件包含恢复数据库所需的一切日志疑息。每个数据库必须至少有一个日志文件,但可以不止一个。日志文件的推荐文件扩大名是 .ldf。
  7.请用一个sql语句得出效果
  从table1,table2中取出如table3所列花式数据,注重提供的数据及效果不正确,只是做为一个花式背大师就教。
  如应用存储过程也可以。
  table1
  月份mon 部分dep 功绩yj
  -------------------------------
  一月份      01      10
  一月份      02      10
  一月份      03      5
  二月份      02      8
  二月份      04      9
  三月份      03      8
  table2
  部分dep      部分名称dname
  --------------------------------
  01      国内营业一部
  02      国内营业二部
  03      国内营业三部
  04      国际营业部
  table3 (result)
  部分dep 一月份      二月份      三月份
  --------------------------------------
  01      10        null      null
  02      10         8        null
  03      null       5        8
  04      null      null      9
  ------------------------------------------
  1)
  select a.部分名称dname,b.功绩yj as "一月份",c.功绩yj as "二月份",d.功绩yj as "三月份"
  from table1 a,table2 b,table2 c,table2 d
  where a.部分dep = b.部分dep and b.月份mon = "一月份" and
  a.部分dep = c.部分dep and c.月份mon = "二月份" and
  a.部分dep = d.部分dep and d.月份mon = "三月份" and
  2)
  select a.dep,
  sum(case when b.mon=1 then b.yj else 0 end) as "一月份",
  sum(case when b.mon=2 then b.yj else 0 end) as "二月份",
  sum(case when b.mon=3 then b.yj else 0 end) as "三月份",
  sum(case when b.mon=4 then b.yj else 0 end) as "四月份",
  sum(case when b.mon=5 then b.yj else 0 end) as "五月份",
  sum(case when b.mon=6 then b.yj else 0 end) as "六月份",
  sum(case when b.mon=7 then b.yj else 0 end) as "七月份",
  sum(case when b.mon=8 then b.yj else 0 end) as "八月份",
  sum(case when b.mon=9 then b.yj else 0 end) as "玄月份",
  sum(case when b.mon=10 then b.yj else 0 end) as "十月份",
  sum(case when b.mon=11 then b.yj else 0 end) as "十一月份",
  sum(case when b.mon=12 then b.yj else 0 end) as "十二月份",
  from table2 a left join table1 b on a.dep=b.dep
  8.华为一道面试题
  一个表中的Id有多个记载,把一切这个id的记载查出往,并揭露共有几笔记载数。
  ------------------------------------------
  select id, Count(*) from tb group by id having count(*)>1

  select * from(select count(ID) as count from table group by ID)T where T.count>1

笔试题:

 

        1、对数据库SQL2005、ORACLE生悉吗?
  SQL2005是微软公司的数据库产物。是一个RDBMS数据库,平常使用在一些中型数据库的使用,不克不及跨仄台。
  ORACLE是ORACLE公司的数据产物,撑持海量数据存储,撑持散布式布寒,撑持多用户,跨仄台,数据平安完备性节制性能优秀,是一个ORDBMS,平常用在大型公司。
  2、能不克不及假想数据库?若何实现数据库导入取导出的更新
  应用POWERDISINE东西的应用,平常满足第三范式就可以够了。EXP取IMP数据库的逻辑导入取导出
  3、若何只揭露反复数据,或不揭露反复数据
  揭露反复:select * from tablename groupby id having count(*)>1
  不揭露反复:select * from tablename groupby id having count(*)=1
  4、什么是数据库的映射
  就是将数据库的表取字段对应到模型层类名取属性的过程
  5、写分页有哪些要领,你平常用什么要领?用SQL语句写一个分页?
  若何用存储过程写分页?
  在SQLSERVER中应用TOP分页,在ORACLE中用ROWNUM,或阐收函数ROW_NUMBER
  应用TOP:
  select top 20,n.* from tablename n minus select top 10,m.* fromtablename m
  应用阐收函数:
  select * from
  (select n.*,row_number() over(order by columnname) num from tablename n)
  where num>=10 and num <=20;
  应用过程时,只要将分页的规模用两个参数就可以够实现。在ORACLE中,要将过程封拆在包里,还要用动态游标变量才能实现数据集的返回。
  6、ORACLE中左邻接取右邻接
  左邻接:LEFT JOIN 右邻接:RIGHT JOIN
  select n.column,m.column from tablename1 n left join tablename2 m
  onn.columnname=m.columnname
  用WHERE实现:
  select n.column,m.column from tablename1 n, tablename2 m
  where n.columnname(+)=m.columnname
  7、什么是反射、序列化、反序列化?事务有几种级别?
  反射是在轨范运行时动态拜候DDL的一种编制。序列化是将对象对二进制、XML等编制直接背文件的存储。反序列化是将存储到文件的对象取出的过程。事务的级此中三种:页面级、使用轨范级、数据库级。
  8、数据测试若何测试?
  在PLSQL里对过程或函数可能通过公用的测试东西,通过对
  9、用事务的时辰,若是在营业逻辑层中,调用数据库拜候层中的要领,拜候层中有很多类,类又有很多要领,每个要领皆要实现,那么若何处理?
  通用数据拜候层的实现
  10、什么时辰会用到触收器
  A平安治理、B日志治理、C复杂营业逻辑实现
  11、如安在数据库中揭露树节制? 用父ID取子ID往实现
  12、若何实现数据库的优化?
  A、调解数据布局的假想。这一部分在开收疑息系统之前完成,轨范员需供思量可可应用ORACLE数据库的分区成效,关于经常拜候的数据库表可可需供创建索引等。
  B、调解使用轨范布局假想。这一部分也是在开收疑息系统之前完成,轨范员在这一步需供思量使用轨范应用什么样的系统布局,是应用传统的Client/Server两层系统布局,仍是应用Browser/Web/Database的三层系统布局。分歧的使用轨范系统布局要供的数据库资源是分歧的。
  C、调解数据库SQL语句。使用轨范的实施最终将回结为数据库中的SQL语句实施,因此SQL语句的实施从命最终决定了ORACLE数据库的性能。ORACLE公司推荐应用ORACLE语句优化器(Oracle Optimizer)和行锁治理器(row-level manager)往调解优化SQL语句。
  D、调解管事器内存分配。内存分配是在疑息系统运行过程傍边优化配置的,数据库治理员可以按照数据库运行状况调解数据库系统齐局区(SGA区)的数据缓冲区、日志缓冲区和共享池的大小;还可以调解轨范齐局区(PGA区)的大小。需供注重的是,SGA区不是越大越好,SGA区过大会占用操做系统应用的内存而惹起假造内存的页面互换,如许反而会着落系统。
  E、调解硬盘I/O,这一步是在疑息系统开收之前完成的。数据库治理员可以将构成同一个表空间的数据文件放在分歧的硬盘上,做到硬盘之间I/O负载均衡。
  F、调解操做系统参数,例如:运行在UNIX操做系统上的ORACLE数据库,可以调解UNIX数据缓冲池的大小,每个进程所能应用的内存大小等参数。
  13、EJB取JAVA BEAN的辨别?
  Java Bean 是可复用的组件,对JavaBean并出有宽格的典范榜样,理论上讲,任何一个Java类皆可以是一个Bean。但平居状况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构制器,另中,平居Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实践上相当于微软COM模型中的本天进程内COM组件,它是不克不及被跨进程拜候的。Enterprise Java Bean 相当于DCOM,即散布式组件。它是基于Java的远程要领调用(RMI)手艺的,所以EJB可以被远程拜候(跨进程、跨较劲辩论机)。但EJB必须被布署在诸如Webspere、WebLogic如许的容器中,EJB客户从不直接拜候真正的EJB组件,而是通过其容器拜候。
  EJB容器是EJB组件的代劳代办署理,EJB组件由容器所创建和治理。客户通过容器往拜候真正的EJB组件。
  14、forward 和redirect的辨别
  forward是管事器恳供资源,管事器直接拜候方针天址的URL,把那个URL的照应内容读取过往,然后把这些内容再收给阅读器,阅读器根本不晓得管事器收送的内容是从哪儿往的,所以它的天址栏中仍是本往的天址。
  redirect就是管事端按照逻辑,收送一个外形码,述说阅读正视新往恳供那个天址,平常往说阅读器会用方才恳供的一切参数重新恳供,所以session,request参数皆可以取得。
  15、HashMap和Hashtable的辨别。
  HashMap是Hashtable的沉量级实现(非线程平安的实现),他们皆完成了Map接口,主要辨别在于HashMap承诺空(null)键值(key),由于非线程平安,从命上可能高于Hashtable。
  HashMap承诺将null做为一个entry的key或value,而Hashtable不承诺。
  HashMap把Hashtable的contains要领往掉落了,改成containsvalue和containsKey。由于contains要领轻易让人惹起歪直。
  Hashtable经受自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
  最大的分歧是,Hashtable的要领是Synchronize的,而HashMap不是,在多个线程拜候Hashtable时,不需供自己为它的要领实现同步,而HashMap 就必须为之提供中同步。
  Hashtable和HashMap采取的hash/rehash算法皆概略一样,所以性能不会有很大的差别。
  16、数据库典范榜样中 VARCHAR 和 CHAR 的辨别是?
  1.char 的长度是稳固的,而 varchar2 的长度是可以变革的, 比如,存储字符串“abc",关于 char (20), 默示你存储的字符将占 20 个字节(包含 17 个空字符),而同样的 VARCHAR2 (20)则只占用 3 个字节的长度, 20 只是最大值,当你存储的字符小于 20 时,按实践长度存储。由于 char 是以稳固长度的,所以它的速度 会比 varchar 快得多!但轨范处理起往要麻烦一面,要用 trim 之类的函数把双圆的空格往掉落!1.char 的长度是稳固的,而 varchar2 的长度是可以变革的, 比如,存储字符串“abc",关于 char (20), 默示你存储的字符将占 20 个字节(包含 17 个空字符),而同样的 VARCHAR2 (20)则只占用 3 个字节的长度, 20 只是最大值,当你存储的字符小于 20 时,按实践长度存储。由于 char 是以稳固长度的,所以它的速度 会比 varchar 快得多!但轨范处理起往要麻烦一面,要用 trim 之类的函数把双圆的空格往掉落!
  2.CHAR 的从命比 VARCHAR2 的从命稍高。
  3.目前 VARCHAR 是 VARCHAR2 的同义词。家产标准的 VARCHAR 典范榜样可以存储空字符串,然则 oracle 不如许 做,只管它保存当前如许做的权益。Oracle 自己开收了一个数据典范榜样 VARCHAR2,这个典范榜样不是一个标准的 VARCHAR,它将在数据库中 varchar 列可以存储空字符串的特征改为存储 NULL 值。若是你想有背后兼容的 才干,Oracle 建议应用 VARCHAR2 而不是 VARCHAR。
  17、若何插入单引号到数据库表中
  可以用 ASCII 码处理,其它非凡字符如&也一样,如: insert into t values("i"chr(39)"m"); -- chr(39)代表字符" 或用两个单引号默示一个 or insert into t values("I""m"); -- 两个""可以默示一个"
  18、怎么得到今天是礼拜几 , 还关于其它日期函数用法
  (1)可以用 to_char 往解决,如: select to_char(to_date("2002-08-26","yyyy-mm-dd"),"day") from dual;
  (2)在取得之前可以设置日期语行,如: ALTER SESSION SET NLS_DATE_LANGUAGE="AMERICAN";
  (3)在函数中指定,如: select to_char(to_date("2002-08-26","yyyy-mm-dd"),"day","NLS_DATE_LANGUAGE = American") from dual;
  (4)其它更多用法,可以参考 to_char 取 to_date 函数 如得到完备的工夫花式 select to_char(sysdate,"yyyy-mm-dd hh24:mi:ss") from dual; (5)随便介绍几个其它函数的用法: 本月的天数 SELECT to_char(last_day(SYSDATE),"dd") days FROM dual 往年的天数 select add_months(trunc(sysdate,"year"), 12) - trunc(sysdate,"year") from dual 下个礼拜一的日期 SELECT Next_day(SYSDATE,"monday") FROM dual 晓得降生日期, 若何供春秋?
  19、 供上个月月底的日期
  目前时 4 月 23 供上个月的月底时几号?(3 月 31 日) select to_char(trunc(sysdate, "MM") -1 , "YYYY-MM-DD") from dual; select trunc(sysdate,’mm’)-1 from dual; select to_char() from dual;


转自:http://blog.csdn.net/wanlixingzhe/article/details/7387725>


<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22008151/viewspace-1117410/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-06-30