ORACLE 数据库及SQL 语言考试题及答案
考试试题说明:
试题包括三类,名词解释、ORACLE 数据库知识问答、SQL 语句编写,主要用于考察新同事ORACLE 数据库知识和SQL 语言掌握情况。名词解释可以在回答中阐明名词的定义和你所了解的任何相关信息,没有字数限制,但避免长篇大论,简要描述即可。ORACLE 数据库知识问答,重点在于切中要害,回答按点给分,每题2分。SQL 语句编写检查大家的实际SQL 语句编写能力及掌握情况,注意格式规范,要清晰易读。
一、名词解释一、名词解释
1. 数据库
数据库是按照数据结构来组织、存储和管理数据的仓库。 2. 实例
实例是一组Oracle 后台进程/线程以及一个共享内存区,这些内存由同一个计算机上运行的线程/进程所共享。 3. 表空间
表空间是数据库的逻辑划分,用于存放数据库对象,主要是数据表,所以称作表空间。
ORACLE 自身存在一些表空间,如system 、user 和undo 表空间。数据库用户也可以自己定义自己的表空间,并为每个表空间分配对应的数据文件。
4. 索引
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。 索引不论逻辑上和物理上都与相关的表的数据无关,索引需要独立的存储空间,所以索引在创建之初就需要设置对应的表空间。
二、ORACLE 数据库知识问答
1. 数据表Pirmary Key 和Unique Key 的作用和区别
作用:
Pirmary Key 和Unique Key 都是为数据表提供唯一性约束。
区别:
Primary key 的1个或多个列必须为NOT NULL ,如果列为NULL ,在增加PRIMARY KEY 时,列自动更改为NOT NULL 。而UNIQUE KEY 对列没有此要求。
一个表只能有一个PRIMARY KEY ,但可以有多个UNIQUE KEY 。
2. dos 模式下数据库用户备份、恢复命令
数据库备份:exp 用户名/密码@连接标识符
数据库恢复:imp 用户名/密码@连接标识符
3. 列举五个常用的集合函数
max,min,sum,avg,count
4. round 与trunc 在处理数字方面的区别,并举例说明
round 返回四舍五入后的值,而trunc 返回截取后的值,不进行四舍五入。
如round(1234.5678,2) 返回值
1234.57;而trunc(1234.5678,2)返回值 1234.56。 5. union 与union all 的区别
都是用来将查询结果进行合并的操作。区别在于union 会剔除合并内容中重复的记录,union all 则不会剔除。 6. 普通视图(View )和物化视图(Materialized View )的区别)的区别
1、普通视图不存放数据,物化视图存放数据
2、在使用视图进行查询时,是通过View 中的SQL 查询原表的数据,不能提高查询性能。在通过物化视图进行查询时,直接读取物化视图的数据,提高查询性能。
3、对普通视图应用更新、删除操作会影响原表的数据。只读物化视图不能进行DML 操作。可更新物化视图可进行DML 操作,并且在刷新时操作会被推送回原表。可写物化视图可进行DML 操作,但刷新后所有修改操作在刷新后全部丢失。
答出任两点区别即可。
7. Oracle 数据表连接的方式有哪几种
自连接、内连接、外连接、自然连接
三、SQL 语句编写
背景:
创建学生表student(学号、姓名、年龄、出生日期、身份证编号、院系名称、性别)、课程表course
(课程号、课程名、先行课、学分)和学生选课表student_course(学号、课程号、成绩)。之后的试题以这三个数据表为基础,进行sql编写。
create table student
(学号 varchar2(10) not null,
姓名 varchar2(20) not null,
性别 varchar2(8) not null,
年龄 number(3) not null,
出生日期 date,
身份证编号 varchar2(18) not null,
院系名称 varchar(20), --注意:考试时不要忘记逗号
primary key (学号)
);
create table course
(课程号 varchar2(6) not null,
课程名 varchar2(50) not null,
先行课varchar2(6) ,
学分number(3) not null ,
primary key (课程号)
);
create table student_course
(学号 varchar2(10) not null,
课程号 varchar2(6) not null, --注意:考试时不要忘记逗号
成绩 numeric(4,1) not null, --注意:考试时不要忘记逗号
primary key (学号,课程号)
);
1. 创建用户dbuser,密码为dbuser,并赋于DBA权限
Grant dba to dbuser identified by dbuser;
或
Create user dbuser identified by dbuser;
Grant dba to dbuser;
2. 修改用户dbuser的密码为dbuserpwd
Alter user dbuser identified by dbuserpwd;
3. 对表student插入一行数据,学号:2012102701,姓名:张三,性别:男,年龄:22,身份证编号370111************,院系名
称:计算机系
insert into student(学号,姓名,性别,年龄,身份证编号,院系名称)
values('2012102701','张三','男',22,'370111************','计算机系');
4. 查询“计算机系”全体学生的姓名
select 姓名 from student where 院系名称='计算机系' ;
5. 查询院系名称为空的学生的学号、姓名
select学号、姓名 from student where 院系名称 is null;
6. 查询所有年龄在20岁以下的学生姓名及其年龄
select 姓名,年龄 from student where 年龄<20 ;
7. 查询考试成绩有不及格的学生的学号
select 学号 from student_course where 成绩<60;
8. 查询选修了课程但考试成绩全不及格的学生的学号、姓名
select s.学号, s.姓名
from student s
where not exists (select 1
from student_course sc
where s.学号 = sc.学号
and sc.成绩>= 60)
and exists (select 1 from student_course sc where s.学号 = sc.学号);
9. 查询“信息系”,“数学系”和“计算机系”学生的姓名和性别
select 姓名, 性别 from student where 院系名称 in ('信息系', '数学系', '计算机系');
或
select 姓名, 性别 from student where 院系名称 = '信息系' or 院系名称 = '数学系'
or 院系名称 = '计算机系';
10. 查询不是“信息系”,“数学系”和“计算机系”学生的姓名和性别
select 姓名, 性别from student where 院系名称 not in ('信息系', '数学系', '计算机系');
或
select 姓名, 性别from studentwhere 院系名称 != '信息系' and 院系名称 != '数学系' and 院系名称 != '计算机系';
oracle四舍五入11. 查询所有姓“刘”的学生的姓名,学号和性别
select 姓名,学号,性别 from student where 姓名 like '刘%';
12. 查询名字中第2个字为“阳”字的学生姓名和学号
select 姓名,学号from student where 姓名 like '_阳%';
13. 查询以”DB_”开头,且倒数第3个字符为i的课程的详细情况
select * from course c where c.课程名 like 'DB\_%i__' escape ‘\’;
14. 查询全体学生情况,结果按所在院系名称升序排列,同一系中的学生按年龄降序
select * from student order by 院系名称,年龄 desc;
15. 查询“张三”同学选修的所有的课程名以及学分、成绩
select c.课程名,c.学分,sc.成绩 from student s,course c,student_course sc
where s.学号 = sc.学号
and sc.课程号 = c.课程号
and s.姓名='张三';
16. 查询学生的总人数
select count(1) from student;
17. 查询选修了课程的学生人数
select count(1) from student s where exists (select 1 from student_course scwhere s.学号 = sc.学号);
或
select count(distinct s.学号) from student s,student_course sc
where s.学号 = sc.学号;
18. 查询没有选修任何课程的学生学号及姓名
select s.学号, s.姓名
from student s
where not exists (select 1 from student_course sc where s.学号 = sc.学号);
19. 查询student中性别为“女”学生最小年龄
select min(年龄) from student where 性别='女';
20. 查询选修1号课程的学生最高分数
select max(成绩) from student_course where 课程号='1';
21. 查询选修了3门以上的课程的学生学号、姓名
select s.学号,s.姓名 from student s ,student_course sc
where s.学号 = sc.学号
group by s.学号,s.姓名
having count(sc.课程号)>3;
22. 求各个课程号及相应的选课人数求各个课程号及相应的选课人数
select sc.课程号,count(sc.学号) from student_course sc group by sc.课程号;
23. 查询选修2号课程且成绩在90分以上的所有学生。
select s.学号, s.姓名 from student_course sc, student s where sc.学号 = s.学号 and sc.课程号 = '2'
and sc.成绩> 90
24. 查询平均成绩大于60的学生学号、课程数、总成绩
select 学号,count(1) 课程数,sum(sc.成绩) 总成绩 from student_course sc group by sc.学号 having avg(sc.成绩)>60;
25. 为学生成绩评级,定义成绩90分及以上为“优”,75分至90分为“良”,60分至75分为“中”,60分以下为
“差”,分别统计姓名、课程、成绩评级。如张三、JA V A 、优、优
select s.姓名,c.课程名,case when sc.成绩>=90 then '优' when sc.成绩>=75 then '良' when sc.成绩>=60 then '中' else '差' end 成绩评级
from student s, student_course sc, course c where s.学号 = sc.学号
and sc.课程号 = c.课程号; 26. 查询与“刘晨”在同一个系学习的其他学生
select * from student s where s.姓名 !='刘晨' and exists (select 1 from student st where st.姓名='刘晨' and st.院系名
称
=s.院系名称 ); 27. 将student 表中身份证编号为18位的学生的出生日期设置成身份证编号中日期;举例:张三的身份证编号为
500234************,那么他的出生日期为1988-02-25。
update student
set 出生日期=to_date(substr(身份证编号,7,8),´yyyymmdd´)
where length(身份证编号)=18;
28. 将student 表中所有年龄不为空值的男学生年龄增加两岁,出生日期增加365天
update student
set 年龄=年龄+2,
出生日期=出生日期+365
where 性别=´男´ and 年龄 is not null;;
29. 输入student 数据时粗心将部分学生的学号的开始4位“2010”输成“2020”,写一个sql 将这种情况更正过来。 update student
set 学号=´2010´ || substr(学号,5)
where 学号like ‘2020%’;
30. 去除student 表中院系名称中的空格。
update student
set 院系名称=replace(院系名称,´ ´,´´)
31. 查询大于20岁男同学或者小于20岁的女同学的学号、姓名,将查询结果创建成表student1
create table student1 as
select 学号,姓名 from student
where (性别=´男´ and 年龄>20) or (性别=´女´ and 年龄<20);
32. 创建course_tmp 表,结构与course 表相同,但不插入数据
create table course_tmp as
select * from course where 1=2;
33. 函数instr(´instr(´dareway´dareway´dareway´,´,´,´wa´wa´wa´)) , instr(´instr(´dw´dw´dw´,´,´dareway´) ,instr(´,instr(´dareway´dareway´dareway´,´,´dy´)返回结果分别是返回结果分别是
5,0,0
34. 函数replace(´replace(´dareway´dareway´dareway´,´,´,´4´4´4´,´,´,´S´S´),replace(´dareway´dareway´,´,´,´are´are´are´,´,´,´´´)返回结果分别是 dareway, dway
35. 函数substr(´DAREW DAREWAY´
AY´AY´,4,3),substr(,4,3),substr(´DAREW DAREWAY´AY´AY´,5),5)返回结果
ewa, way
36. 利用函数to_char,将当前系统时间转化成如’2012-01-0123:10:10’格式串函数
to_char(sysdate,'yyyy-MM-dd HH24:mi:ss')
37. 参数age1的内容为null,age2内容为12,表达式nvl(age1,0) +30 + nvl(age2,0)的值为
42
38. 删除表student中选修了课程名为“JA V A”的学生
delete from student s
where exists (select 1
from student_course sc, course c
where sc.课程号 = c.课程号
and sc.学号 = s.学号
and c.课程名 = 'JA V A');
39. 利用系统视图all_tables,通过sql生成批量删除所有用户的表名中含有“TEST”表的drop命令,按用户排逆序。
(all_tables视图中常见列table_name,owner等)
select 'drop table ' || owner || '.' || table_name || ';'
from all_tables where table_name like '%TEST%' order by owner desc;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论