`
gaoyu
  • 浏览: 270003 次
  • 来自: 云南大理
社区版块
存档分类
最新评论
阅读更多
史上最强的oracle数据库面试题

SQL Server笔试题 解答
某门户网站数据库Oracle笔试题(DBA职位)
Oracle DBA笔试题答案(阿里巴巴)-综合随意类
阿里巴巴DBA笔试题
数据库面试(Oracle与Sql专题)

Oracle下载-Oracle11g下载
卸载oracle 10i-关于oracle 10g卸载问题
SQL Server笔试题 解答
Oracle面试(DBA For oracle数据库)

oracle Certification Program (OCP认证)的题目

  (1) A 表中有100条记录.

  Select * FROM A Where A.COLUMN1 = A.COLUMN1

  这个语句返回几条记录? (简单吧,似乎1秒钟就有答案了:)

  (2) Create SEQUENCE PEAK_NO

  Select PEAK_NO.NEXTVAL FROM DUAL --> 假设返回1

  10秒中后,再次做


  Select PEAK_NO.NEXTVAL FROM DUAL --> 返回多少?

  (3) SQL> connect sys as sysdba

  Connected.


  SQL> insert into dual values ( 'Y');

     1 row created.

  SQL> commit;

     Commit complete.

  SQL> select count(*) from dual;

     COUNT(*)

     ----------

     2

  SQL> delete from dual;

     commit;

     -->DUAL里还剩几条记录?

  JUST TRY IT
一些高难度的SQL面试题


  以下的null代表真的null,写在这里只是为了让大家看清楚


根据如下表的查询结果,那么以下语句的结果是(知识点:not in/not exists+null)
SQL> select * from usertable;
USERID           USERNAME
-----------      ----------------
     1          user1
     2          null
     3          user3
     4          null
     5          user5
     6          user6
     
SQL> select * from usergrade;
USERID         USERNAME           GRADE
----------     ----------------   ----------
     1        user1              90
     2        null               80
     7        user7              80
     8        user8              90
执行语句:

select count(*) from usergrade where username not in (select username from usertable);

select count(*) from usergrade g where not exists
(select null from usertable t where t.userid=g.userid and t.username=g.username);

结果为:语句1(  0 )   语句2  (  3 )

A: 0     B:1     C:2     D:3      E:NULL


2

在以下的表的显示结果中,以下语句的执行结果是(知识点:in/exists+rownum)
SQL> select * from usertable;
USERID           USERNAME
-----------      ----------------
     1          user1
     2          user2
     3          user3
     4          user4
     5          user5
     
SQL> select * from usergrade;
USERNAME               GRADE
----------------       ----------
user9                  90
user8                  80
user7                  80
user2                  90
user1                  100
user1                  80

执行语句
Select count(*) from usertable t1 where username in
  (select username from usergrade t2 where rownum <=1);
 
Select count(*) from usertable t1 where exists
  (select 'x' from usergrade t2 where t1.username=t2.username and rownum <=1);

以上语句的执行结果是:(  )  (  )
  A:   0        B:   1        C:   2       D:  3

根据以下的在不同会话与时间点的操作,判断结果是多少,其中时间T1原始表记录为;
select * from emp;
EMPNO         DEPTNO       SALARY
-----         ------       ------
100            1           55
101            1           50

select * from dept;
DEPTNO           SUM_OF_SALARY
------           -------------
1                105
2                

可以看到,现在因为还没有部门2的员工,所以总薪水为null,现在,
有两个不同的用户(会话)在不同的时间点(按照特定的时间顺序)执行了一系列的操作,那么在其中或最后的结果为:

time              session 1                            session2
-----------      -------------------------------       -----------------------------------
T1               insert into emp
                 values(102,2,60)
                 
T2                                                     update emp set deptno =2
                                                        where empno=100

T3                                                    update dept set sum_of_salary =
                                                       (select sum(salary) from emp
                                                     where emp.deptno=dept.deptno)
                                                     where dept.deptno in(1,2);
                                                 
T4           update dept set sum_of_salary =
                (select sum(salary) from emp
            where emp.deptno=dept.deptno)
            where dept.deptno in(1,2);
             
T5                                                    commit;

T6                                                    select sum(salary) from emp group by deptno;
                                                     问题一:这里会话2的查询结果为:                                                  
T7          commit;
=======到这里为此,所有事务都已完成,所以以下查询与会话已没有关系========

T8          select sum(salary) from emp group by deptno;
            问题二:这里查询结果为

T9         select * from dept;
            问题三:这里查询的结果为

问题一的结果(  )  问题二的结果是(  )  问题三的结果是(  )

A:                        B:
----------------         ----------------
1        50               1        50
2        60               2        55

C:                        D:
----------------         ----------------
1        50               1       115
2       115               2        50

E:                        F:
----------------         ----------------
1       105               1       110
2        60               2        55


有表一的查询结果如下,该表为学生成绩表(知识点:关联更新)
select id,grade from student_grade
ID                 GRADE
--------           -----------
1                  50
2                  40
3                  70
4                  80
5                  30
6                  90

表二为补考成绩表
select id,grade from student_makeup
ID                 GRADE
--------           -----------
1                  60
2                  80
5                  60

现在有一个dba通过如下语句把补考成绩更新到成绩表中,并提交:
update student_grade s set s.grade =
(select t.grade from student_makeup t
   where s.id=t.id);
commit;
请问之后查询:
select GRADE from student_grade where id = 3;结果为:

A: 0    B:  70   C:  null   D:  以上都不对


根据以下的在不同会话与时间点的操作,判断结果是多少,
其中时间T1
                session1                              session2
--------------------------------------     ----------------------------------------
T1         select count(*) from t;
          --显示结果(1000)条
         
T2         delete from t where rownum <=100;

T3                                          begin
                                             delete from t where rownum <=100;  
                                             commit;
                                           end;
                                           /
                                             
T4         truncate table t;

T5         select count(*) from t;
          --这里显示的结果是多少

A:  1000        B:   900     C:   800     D:   0


问题描述:

  为管理岗位业务培训信息,建立3个表:
  S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄
  C (C#,CN ) C#,CN 分别代表课程编号、课程名称
  SC ( S#,C#,G ) S#,C#,G 分别代表学号、所选修的课程编号、学习成绩
  1. 使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名

  --实现代码:

  Select SN,SD FROM S
  Where [S#] IN(
  Select [S#] FROM C,SC
  Where C.[C#]=SC.[C#]
  AND CN=N'税收基础') 

  2. 使用标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位

  --实现代码:

  Select S.SN,S.SD FROM S,SC

  Where S.[S#]=SC.[S#]

  AND SC.[C#]='C2'

  3. 使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位

  --实现代码:

  Select SN,SD FROM S

  Where [S#] NOT IN(

  Select [S#] FROM SC

  Where [C#]='C5')

  4. 使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位
http://www.ad0.cn/netfetch/
  --实现代码:

  Select SN,SD FROM S

  Where [S#] IN(

  Select [S#] FROM SC

  RIGHT JOIN

  C ON SC.[C#]=C.[C#] GROUP BY [S#]

  HAVING COUNT(*)=COUNT([S#]))

  5. 查询选修了课程的学员人数

  --实现代码:

  Select 学员人数=COUNT(DISTINCT [S#]) FROM SC

  6. 查询选修课程超过5门的学员学号和所属单位

  --实现代码:

  Select SN,SD FROM S

  Where [S#] IN(

  Select [S#] FROM SC

  GROUP BY [S#]

  HAVING COUNT(DISTINCT [C#])>5)

      题目2

  问题描述:

  已知关系模式:

  S (SNO,SNAME) 学生关系。SNO 为学号,SNAME 为姓名

  C (CNO,CNAME,CTEACHER) 课程关系。CNO 为课程号,CNAME 为课程名,CTEACHER 为任课教师

  SC(SNO,CNO,SCGRADE) 选课关系。SCGRADE 为成绩

  1. 找出没有选修过“李明”老师讲授课程的所有学生姓名

  --实现代码:

  Select SNAME FROM S

  Where NOT EXISTS(

  Select * FROM SC,C

  Where SC.CNO=C.CNO

  AND CNAME='李明'

  AND SC.SNO=S.SNO)

  2. 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩

  --实现代码:

  Select S.SNO,S.SNAME,AVG_SCGRADE=AVG(SC.SCGRADE)

  FROM S,SC,(

  Select SNO

  FROM SC

  Where SCGRADE<60

  GROUP BY SNO

  HAVING COUNT(DISTINCT CNO)>=2

  )A Where S.SNO=A.SNO AND SC.SNO=A.SNO

  GROUP BY S.SNO,S.SNAME

  3. 列出既学过“1”号课程,又学过“2”号课程的所有学生姓名

  --实现代码:

  Select S.SNO,S.SNAME

  FROM S,(

  Select SC.SNO

  FROM SC,C

  Where SC.CNO=C.CNO

  AND C.CNAME IN('1','2')

  GROUP BY SNO

  HAVING COUNT(DISTINCT CNO)=2

  )SC Where S.SNO=SC.SNO

  4. 列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号

  --实现代码:

  Select S.SNO,S.SNAME

  FROM S,(

  Select SC1.SNO

  FROM SC SC1,C C1,SC SC2,C C2

  Where SC1.CNO=C1.CNO AND C1.NAME='1'

  AND SC2.CNO=C2.CNO AND C2.NAME='2'

  AND SC1.SCGRADE>SC2.SCGRADE

  )SC Where S.SNO=SC.SNO

  5. 列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩

  --实现代码:

  Select S.SNO,S.SNAME,SC.[1号课成绩],SC.[2号课成绩]

  FROM S,(

  Select SC1.SNO,[1号课成绩]=SC1.SCGRADE,[2号课成绩]=SC2.SCGRADE

  FROM SC SC1,C C1,SC SC2,C C2

  Where SC1.CNO=C1.CNO AND C1.NAME='1'

  AND SC2.CNO=C2.CNO AND C2.NAME='2'

  AND SC1.SCGRADE>SC2.SCGRADE

  )SC Where S.SNO=SC.SNO




某门户网站数据库职位(DBA)笔试题
1、事务是什么?

2、oracle中truncate和delete命令有何区别?

3、Oracle中char和varchar2数据类型有什么区别?有数据”test”分别存放到char(10)和varchar2(10)类型的字段中,其存储长度及类型有何区别?

4、参见如下表结构
出版社:
       出版社代码 char(2),
       出版社名称 varchar2(32)

图书:
       图书编号 char(8),
       图书名称 varchar2(128),
       出版社代码 char(2),
       作者代号 char(4),
       图书简介 varchar2(128)

作者:
       作者代号 char(4),
       作者名称 varchar2(10),
       性别 char(1),
       年龄 number(3),
       文学方向 varchar2(64)

获奖名单:
       获奖日期 date,
       获奖人员 char(4)

编写SQL语句,找出“作者”库中没有出现在“获奖名单”库中所有作者信息的SQL语句(提示:使用not in、not exists以及外关联三种方法,并说明哪种方法最优。

5、Oracle数据库表存在伪列rowid,请利用rowid编写一个SQL语句,从以下记录中找到唯一记录,并将其flag列更新为Y

No       name      sex     flag
1                张三        1               N
1                张三        1               N
1                张三        1               N


6、Oracle中,需要在查询语句中把空值(NULL)输出为0,如何处理?

7、见第四题“获奖名单”表,写出SQL语句,查询出在上一个月获奖的人员。

8、见第四题“图书”表,在表上对图书名称、出版社代码、作者代号创建了组合索引,请问在执行如下语句时会不会利用到索引。
Select * from 图书 where 图书名称=’xxxx’
Select * from 图书 where 图书名称=’xxxx’ and 出版社代码=’bb’
Select * from 图书 where 图书名称=’xxxx’ and 作者代号=’ddd’
Select * from 图书 where 出版社代码=’yyy’
 
9、编写一个简单的Oracle存储过程,输出参数必须有一个是结果集。


      专家对本试卷的分析:
      第一,这张笔试卷从题目的考点上来看,属于基础知识类的;
      第二,从难度上分析属于中等;
      第三,从题目的设置上来看,该公司的主要用意是考察笔试者的工作经验和项目经验,尽管是基础知识,但是只要没做过开发工作,想回答上来并不容易;
      第四,通篇只有第4题最后一问涉及到了“优化”的问题,因此判断该公司这张试题主要是面对开发职位的。



 SQL Server笔试题(Sql2000常见笔试题)

      一 单词解释(2分/个) 34分

  Data 数据 Database 数据库 RDBMS 关系数据库管理系统 GRANT 授权

  REVOKE 取消权限 DENY 拒绝权限 DECLARE 定义变量 PROCEDURE存储过程

  事务 Transaction 触发器 TRIGGER 继续  continue 唯一 unqiue

  主键 primary key  标识列 identity 外键 foreign key  检查 check

  约束 constraint

  二 编写SQL语句(5分/题) 50分 (包含 笔试题问题和解答答案)

  1) 创建一张学生表,包含以下信息,学号,姓名,年龄,性别,家庭住址,联系电话

  Create table stu (学号 int ,
  姓名 varchar(8),
  年龄 int,
  性别 varchar(4),
  家庭地址 varchar(50),
  联系电话 int
  );

  2) 修改学生表的结构,添加一列信息,学历

  Alter table stu add 学历 varchar(6);

  3) 修改学生表的结构,删除一列信息,家庭住址

  Alter table stu drop column 家庭地址

  4) 向学生表添加如下信息:

  学号 姓名年龄性别联系电话学历

  1A22男123456小学

  2B21男119中学

  3C23男110高中

  4D18女114大学

  Insert into stu values(1,’A’,22,’男’,123456,’小学’)

  Insert into stu values(2,’B’,21,’男’,119,’中学’)

  Insert into stu values(3,’C’,23,’男’,110,’高中’)

  Insert into stu values(4,’D’,18,’女’,114,’大学’)


  5) 修改学生表的数据,将电话号码以11开头的学员的学历改为“大专”

  Update stu set 学历=’大专’ where 联系电话 like ‘11%’

  6) 删除学生表的数据,姓名以C开头,性别为‘男’的记录删除

  Delect from stu where 性别=’男’ and 姓名 like ‘c%’

  7) 查询学生表的数据,将所有年龄小于22岁的,学历为“大专”的,学生的姓名和学号示出来

  Select 姓名,学号 from stu where 年龄<22 and 学历=’大专’

  8) 查询学生表的数据,查询所有信息,列出前25%的记录

  Select top 25 percent * from stu

  9) 查询出所有学生的姓名,性别,年龄降序排列

  Select 姓名,性别 from stu order by 年龄 desc

  10) 按照性别分组查询所有的平均年龄

  Select avg(年龄) from stu group by 性别

  三 填空(3分/题) 36分 (包含 笔试题问题和解答答案)

  1) 索引分为__聚集索引___和__非聚集索引__在一张表上最多可以创建1个 聚集索引_索引。但是可以创建_249个非 聚集索引 索引。

  2) 系统存储过程_sp-helptext__是用来显示规则,默认值,未加密的存储过程,用户定义函数,触发或视图的文本

  3) 事务开始:begin Transction

  提交事务:commit Transction

  回滚事务:rollback Transction

  四 问答题(5分/题) 60分 (包含 笔试题问题和解答答案)

  1) 数据库包含哪些那几种后缀名的文件必须,这些文件分别存放在什么的信息?

  主要数据文件(.mdf) 包含数据用户收集的信息,还有数据库其他相关的信息,

  日志数据文件(.ndf) 存放用户对数据库的增删改查的信息,用于备份恢复使用

  2) TRUNCATE TABLE 命令是什么含义?和Delete from 表名有什么区?

  TRUNCATE TABLE: 提供了一种删除表中所有记录的快速方法

  Delete from 表名:可以删除表的一个或多条记录

  3) 说出以下聚合数的含义:avg ,sum ,max ,min , count ,count(*)

  AVG:求平均值

  SUM:求和

  MAX:求最大值

  MIN:求最小值

  COUNT(*):返回所有行数

  COUNT返回满足指定条件的记录值


  4) inner join 是什么意思?作用是什么?写出基本语法结构

  INNER JOIN 内联接,用于返回两个表中要查询的列数据通信

  Select * from 表名1 inner join 表名2 on 条件表达式

  5) 左向外联接,右向外联接,全联接的关健字如何写?

  Left outer join 左向外联接

  Right outer join 右向外联接

  Full outer join 全联接

  6) 子查询分为几类,说明相互之间的别

  了查询分三种基本子查询: 1.使用in 查询返回一列或更多值

  2.比较运算符,返回单个值勤做为外查询的参数

  3.用exists 查询时相当于进行一次数据测试

  7) 实现实体完整性,实现域完整性,实现 完整性(引用完整性),实现自定义完整性分别使用什么手段?

  实现实体完整性: 主键约束 唯一约束 标识列

  实现域完整性: 默认值约束 检查约束 非空属性

  引和完整性: 外键引用

  8) 视图可以更新吗?会影响到实际表吗?

  视图是可以更新的,视图只是基于基本表上的虚拟表,对视图的更新会直接影响到实际表

  9) 谈谈这样几个角色, dbo , Sysadmin public

  Dbo : 是数据库的拥有者,对数据库拥有所有操作的权限

  Sysadmin : 可以对SQL SERVER执行任何活动

  Public : 自动创建的,能捕获数据库中用户的所有默认权限

  10) 何为动态游标?何为静态游标?

  动态游标与静态游标相对,反映结果集中所做的所有更改,

  静态游标的结果集在游标打开时,建立在tempdb中,总按照游标打开时的原样显示

  11) 什么是存储过程?为什么存储过程要比单纯的Sql 语句执行起来要快?

  存储过程:是一组预先编译好的T-SQL代码

  在创建存储过程时经过了语法和性能优化,执行不必重复的步骤,使用存储过程可提高运行效率

  12)什么是Inserted 表 ?什么是Deleted 表?

  Inserted表用于存储inserted和update语句影响的副本

  Deleted 表用于存储delect 和 update语句影响的行的副本





Oracle面试(DBA For oracle数据库)

这里的回答并不是十分全面,这些问题可以通过多个角度来进行解释,也许你不必在面试过程中给出完全详尽的答案,只需要通过你的解答使面试考官了解你对ORACLE概念的熟悉程度。

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产品的目录。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics