1
在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。在这几个阶段中,数据独立性最高的是()阶段。(3.0分)
我的答案:A
2
数据库的概念模型独立于()。(3.0分)
我的答案:A
3
()是存储在计算机内有结构的数据的集合。(3.0分)
我的答案:B
4
数据库(DB)、数据库系统(DBS)和数据库管理系统(DBMS)三者之间的关系是()。(3.0分)
我的答案:A
5
数据库管理系统是()。(3.0分)
我的答案:B
6
数据库系统的数据独立性是指()。
(3.0分)
不会因为数据的变化而影响应用程序
不会因为系统数据存储结构与数据逻辑结构的变化而影响应用程序
不会因为存储策略的变化而影响存储结构
不会因为某些存储结构的变化而影响其他的存储结构
我的答案:B
7
数据库技术的奠基人之一E.F.Codd从1970年起发表过多篇论文,主要论述的是()。(3.0分)
我的答案:C
8
在数据库设计中,用E-R图来描述信息结构但不涉及信息在计算机中的表示,它是数据库设计的()阶段。(3.0分)
我的答案:B
9
概念模型独立于()。(3.0分)
我的答案:B
10
DBS是采用了数据库技术的计算机系统,DBS是一个集合体,包含数据库、计算机硬件、软件和()。(3.0分)
我的答案:C
11
描述数据库全体数据的全局逻辑结构和特性的是() 。(3.0分)
我的答案:A
12
用户或应用程序看到的那部分局部逻辑结构和特征的描述是( ),它是模式的逻辑子集。(3.0分)
我的答案:C
13
概念模型是现实世界的第一层抽象,这一类最着名的模型是( ) 。(3.0分)
我的答案:D
14
区分不同实体的依据是( ) 。(3.0分)
我的答案:B
15
在关系数据库中,用来表示实体间联系的是()。(3.0分)
我的答案:B
16
一个工作人员可使用多台计算机,而一台计算机被多个人使用,则实体工作人员与实体计算机之 间的联系是( )
(3.0分)
我的答案:C
17
从计算机软件系统的构成看,DBMS是建立在( )之上的软件系统(3.0分)
我的答案:B
18
以下对关系模型性质的描述,不正确的是( )。(3.0分)
我的答案:C
19
E-R图用于描述数据库的( )。(3.0分)
我的答案:A
20
位于用户与操作系统之间的一层数据管理软件,数据库在建立、使用和维护时由其统一管理、统一控制,该软件是:(3.0分)
我的答案:A
21
目前已逐渐淘汰了网状数据库和层次数据库,成为当今最为流行的商用数据库系统的是:(3.0分)
我的答案:A
22
下列说法中,不属于数据库管理系统特征的是()(3.0分)
我的答案:C
23
下列关于数据库技术的描述,错误的是()(3.0分)
我的答案:B
24
下列模式中,用于描述单个用户数据视图的是()(3.0分)
我的答案:C
25
E-R图是数据库设计的工具之一,它适用于建立数据库的( )(3.0分)
我的答案:A
1. 根据要求,完成以下题目。注意:通过scott用户下的emp表实现(empno员工号,ename员工名,sal工资,deptno 部门号)。
(1)创建一个存储过程,以部门号为参数,输出该部门的人数。
Create or replace procedure process(dno number,dept_num out number)
Is
Begin
Select count(*) into dept_num from emp where deptno = dno;
Dbms_output.put_line(dept_num);
End;
(2)创建一个函数,以部门号为参数,返回该部门的平均工资。
Create or replace function get_sal_avg(dept number)
Return number
Is
V_avg number(8,2);
begin
Select avg(sal) into V_sal from emp where deptno = dept;
Return V_sal;
End;
2. 在SCOTT模式下有两个结构完全相同的表emp和emp_copy。每当向emp表插入一条新的记录时,ORACLE自动将新插入的记录复制到emp_copy表中请创建一个触发器tg_emp_insert实现上述要求的功能。(10分)
(说明:emp表的结构如下:emp(empno,ename,job,depno,sal,hiredate,comm)
create or replace trigger copy_trigger
after
insert on emp
for each row
begin
insert into emp_copy
values(:new.empno,:new.ename,:new.job,:new.depno,:new.sal,:new.hireda te,:new.comm);
end;
1、工资在2000到2500的员工的员工姓名,部门编号,工资
select empno,ename,sal from emp where sal>=2000 and sal<=2500;
2、显示每个雇员的年薪(12月的工资+奖金,注意判断奖金是否为空),并根据年薪排序
select ename,(sal*12+comm) as money from emp order by money
3、查找1982.1.1后入职的员工信息,并根据入职时间排序(注意时间类型的处理,可以用指定格式字符串自动转换也可以使用转换函数)
select empno,ename,hiredate from emp where hiredate >to_date('1982/1/1','yyyy/mm/dd') order by hiredate;
4、显示名字中包含A的员工姓名和工资(like模糊查询)
select ename,sal from emp where ename like ‘%A%’;
5、显示所有员工中最高工资和最低工资(统计函数)
select max(sal),min(sal) from emp;
6、显示每个部门的每种岗位的平均工资和最高工资(分组)
select deptno,job,avg(sal),max(sal) from emp group by deptno,job;
7、查询SMITH部门和岗位相同的雇员信息
select * from emp where deptno=(select deptno from emp where ename='SMITH') and job =(select job from emp where ename='SMITH');
8、显示高于自己部门平均工资的员工信息
select * from emp e where e.sal > (select avg(sal) from emp where deptno=e.deptno);
9、要求查询出雇员的姓名, 工作, 雇员的直接上级领导姓名以及部门名称
select t1.ename 员工姓名, t2.ename 直接上级 from emp t1,emp t2 where t1.MGR = t2.empno;
select e.ename,e.job,m.ename,d.dname from emp e,emp m,dept d where e.mgr=m.empno and e.deptno=d.deptno;
10、查询同部门中工资高于1000 的员工数量超过2人的部门名称和人数
SELECT dname,COUNT(*)
FROM emp ,dept
WHERE emp.deptno =dept.deptno AND sal > 1000
GROUP BY dname
HAVING COUNT(*) > 2;
11、查询20号部门的员工号、员工名及其部门名称,和所有其他部门的部门名
SELECT empno,ename,dname FROM emp right join dept on emp.deptno=dept.deptno AND emp.deptno=20
SELECT empno,ename,job,deptno FROM emp e
WHERE EXISTS(SELECT * FROM emp
WHERE mgr=e.empno);
SELECT empno,ename,job,deptno FROM emp e
WHERE empno IN (SELECT mgr FROM emp
WHERE mgr IS NOT NULL);
1.使用loop语句求前100个自然数的和,并输出到屏幕。
declare
iint:=0;
sum_i int:=0;
begin
loop
i:=i+1;
sum_i:=sum_i+i;
exit when i=100;
end loop;
dbms_output.put_line('前100个自然数的和是:'||sum_i);
end;
2.使用while语句求前100个自然数的和,并输出到屏幕。
declare
iint:=0;
sum_i int:=0;
begin
while i<=99 loop
i:=i+1;
sum_i:=sum_i+i;
end loop;
dbms_output.put_line('前100个自然数的和是:'||sum_i);
end;
3.使用for语句求前100个自然数中偶数之和,并输出到屏幕。
declare
sum_i int:=0;
begin
for i in 1..100 loop
if mod(i,2)=0 then
sum_i:=i+sum_i;
end if;
end loop;
dbms_output.put_line('前100个自然数的和是:'||sum_i);
4.输入一个雇员编号,如果该雇员的职位是PRESIDENT就给他的工资增加1000,如果该雇员的职位是MANAGER 就给他的工资增加500,其它职位的雇员工资增加200。
declare
v_empno number(32) :=&n;
v_job varchar2(20);
v_sal number(20);
begin
select job,sal into v_job,v_sal from emp where empno=v_empno;
if(v_job ='PRESIDENT') then v_sal :=v_sal+1000;
elsif (v_job = 'MANAGER') then v_sal :=v_sal+500;
else v_sal :=v_sal+200;
end if;
dbms_output.put_line(v_sal);
end;
1.分别用LOOP循环、WHILE循环、FOR循环以及显式游标统计并输出各个部门的人数以及平均工资;
loop简单循环
declare
cursor c_emp is select count(*) c_deptno,avg(sal) c_avgsal from emp group by deptno;
v_dept c_emp%rowtype;
begin
open c_emp;
loop
fetch c_emp into v_dept;
exit when c_emp%notfound;
dbms_output.put_line(v_dept.c_deptno||' '||v_dept.c_avgsal);
end loop;
close c_emp;
end;
2.while循环
declare
cursor c_emp is select count(*) c_deptno,avg(sal) c_avgsal from emp group by deptno;
v_dept c_emp%rowtype;
begin
open c_emp;
fetch c_emp into v_dept;
while c_emp%found loop
dbms_output.put_line(v_dept.c_deptno||' '||v_dept.c_avgsal);
fetch c_emp into v_dept;
end loop;
close c_emp;
end;
3.for循环
declare
cursor c_emp is select count(*) c_deptno,avg(sal) c_avgsal from emp group by deptno;
begin
for v_dept in c_emp loop
dbms_output.put_line(v_dept.c_deptno||' '||v_dept.c_avgsal);
end loop;
end;
2.使用隐式游标实现以下要求:修改部门号为50的部门地址为‘BEIJING’。如果该部门不存在,则向dept表中插入一个部门号为50,地址为‘BEIJING’的记录。
declare
begin
update dept set loc='BEIJING' where deptno=50;
if sql%notfound then
insert into dept(deptno,loc) values(50,'BEIJING');
end if;
end;
1.创建一个存储过程,以部门号为参数,输出入职日期最早的10个员工信息。
create or replace procedure p_sxt4(v_deptno emp.deptno%type) is
cursor c_emp is select * from emp where deptno = v_deptno order by hiredate;
v_times number := 0;
begin
for v_emp in c_emp loop
v_times := v_times + 1;
dbms_output.put_line(v_emp.empno || '**' || v_emp.ename || '**' || to_char(v_emp.hiredate,'yyyy-mm-dd'));
if v_times = 10 then
exit;
end if;
end loop;
end;
--执行
begin
p_sxt4(20);
end;
2.创建一个函数,以员工号为参数,返回该员工所在的部门的平均工资
create or replace function f_sxt7(v_empno emp.empno%type) return emp.sal%type is
vr_sal emp.sal%type;
begin
select avg(sal) into vr_sal from emp where deptno = (select deptno from emp where empno = v_empno);
return vr_sal;
end;
--执行
select f_sxt7(7369) from dual;
1.假设在SCOTT模式下有两个结构完全相同的表emp和emp_bak。每当删除emp表的记录时,ORACLE自动将新删除的记录移动到emp_bak表中。请创建一个触发器tg_emp_Delete实现上述要求的功能。
CREATE OR REPLACE TRIGGER tg_emp_deletet
AFTER DELETE ON emp
FOR EACH ROW
BEGIN
INSERT INTO emp_copy VALUES(:OLD.empno, :OLD.ename, :OLD.job, :OLD.deptno, :OLD.sal, :OLD.hiredate, :OLD.comm);
END tg_emp_delete;
2.编写一个触发器,实现周末禁止操作员工表(emp)的功能
create or replace trigger tri_emp_dml
before update or delete or insert on emp
declare
v_day varchar2(20);
begin
select to_char(sysdate,'dy')into v_day from dual;
if v_day='星期六' or v_day='星期日' then
if inserting then
raise_application_error(-20001,'周末不能对员工表做添加操作');
-- RAISE_APPLICATION_ERROR 是将应用程序专有的错误从服务器端转达到客户端应用程序,里面的错误代码和内容,都是自定义的。
end if;
if updating then
raise_application_error(-20002,'周末不能对员工表做修改操作');
end if;
if deleting then
raise_application_error(-20003,'周末不能对员工表做删除操作');
end if;
end if;
end;
1、Please describe the physical storage structure and logical storage structure of the ORACLE database.
①逻辑存储结构主要描述Oracle数据库的内部存储结构,即从技术概念上描述在Oracle数据库种如何组织、管理数据.因此,逻辑存储结构是和操作系统平台无关的,是由Oracle数据库创建和管理的.
②Oracle通过表空间(tablespace)方式,将逻辑存储从物理存储中抽象出来。表空间在逻辑上是一个或多个段的集合,在物理上是一个或多个数据文件的集合。如果使用“关系分析”术语,则段和数据文件之间存在多对多关系:可以将一个表分布在多个数据文件中,而一个数据文件也可能包含多个表的一部分。Oracle通过在段和文件之间插入表空间实体,解决这种多对多关系的问题。
2、Inputing and operating the following code, Analysis of the function of the code.
DECLARE
X NUMBER(7,2);
BEGIN
SELECT sal INTO x FROM emp WHERE empno = 7788;
IF x < 3000 THEN
UPDATE emp SET sal = 3000
WHERE empno = 7788;
END IF;
END;
更新empno为7788的工资,如果工资小于3000,则把该号员工的工资定为3000
3、请在system模式中建立序列xl,序列起始值是100,步长为1。向system模式下的stu(sno,sname,sage,sex)表中插入一条记录,其中主键sno字段的值来自序列xl,姓名’TOM’,年龄18,性别’男’。
Create table stu
values(sno number(8),sname varchar2,sage number(3),sex varchar2);
Create sequence xl;
Insert into stu values(xl.nextval+100,’tom’,18,’男’);
请简述游标的作用,并说明操作游标的一般过程。
游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。
过程:
①定义游标
②打开游标
③提取游标数据
④关闭游标
1、创建一个存储过程,以部门号为参数,查询该部门的平均工资,并输出该部门中比平均工资高的员工号、员工名。并且调用该存储过程,要求根据输入部门编号,查询平均工资及输出比平均工资高的员工号、员工名。
CREATE OR REPLACE PROCEDURE show_emp(p_deptnoemp.deptno%TYPE)
AS
v_salemp.sal%TYPE;
BEGIN
SELECT avg(sal) INTO v_sal FROM emp WHERE deptno=p_deptno;
DBMS_OUTPUT.PUT_LINE(p_deptno||' '||'average salary is:' ||v_sal);
FOR v_emp IN (SELECT * FROM emp WHERE deptno=p_deptno AND sal>v_sal) LOOP
DBMS_OUTPUT.PUT_LINE(v_emp.empno||' '||v_emp.ename);
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('The department doesn’’t exists!');
END show_emp;
过程调用语句:
declare
vdeptnoemp.detpno%type;
Begin
vdeptno:=&deptno;
show_emp(vdeptno);
End;
2、创建一个函数,以部门号为参数,返回部门名、部门人数及部门平均工资。并且调用该函数,输出所有有员工的部门的名称、部门人数和平均工资。
CREATE OR REPLACE FUNCTION ret_deptinfo(p_deptnodept.deptno%TYPE,
p_num OUT NUMBER, p_avg OUT NUMBER)
RETURN dept.dname%TYPE
AS
v_dnamedept.dname%TYPE;
BEGIN
SELECT dname INTO v_dname FROM dept WHERE deptno=p_deptno;
SELECT count(*),avg(sal) INTO p_num,p_avg FROM emp WHERE deptno=p_deptno;
RETURN v_dname;
END ret_deptinfo;
函数调用语句:
DECLARE
v_avgsalemp.sal%TYPE;
v_num NUMBER;
v_dnamedept.dname%TYPE;
BEGIN
FOR v_dept IN (SELECT DISTINCT deptno FROM emp) LOOP
v_dname:=ret_deptinfo(v_dept.deptno,v_num,v_avgsal);
DBMS_OUTPUT.PUT_LINE(v_dname||' '||v_maxsal||' '|| v_avgsal||' '||v_num);
END LOOP;
END;
3、创建学生表student(sno,sname,sex,sage),要求学号sno主键,姓名sname不能重复,性别sex只能是‘男’或者‘女’,年龄sage在15到25之间。创建课程表course(cno,cname),要求课程号cno主键,课程名cname唯一,同时为主键约束列上的唯一性索引设置存储位置和存储参数。创建学生选课表SC(sno,cno,grade),要求成绩grade大于0小于100,有两位小数,sno,cno都是外键,而且sno,cno一起做主键。
CREATE TABLE student(
sno NUMBER(6) CONSTRAINT S_PK PRIMARY KEY,
sname VARCHAR2(20) UNIQUE,
sex CHAR(2) CONSTRAINT S_CK1 CHECK(sex in('男', '女')),
sage NUMBER(6,2) CONSTRAINT S_CK2 CHECK(sage between 15 and 25)
);
CREATE TABLE course(
cno NUMBER(6) PRIMARY KEY,
cname CHAR(20) UNIQUE
USING INDEX TABLESPACE USER
STORAGE(INITIAL 64K NEXT 64K)
);
CREATE TABLE SC(
sno NUMBER(6) REFERENCES student(sno),
cno NUMBER(6) REFERENCES course(cno),
grade NUMBER(5,2)CHECK(grade between 0 and100),
CONSTRAINT SC_PK PRIMARY KEY(sno, cno)
);
4、创建用户user2,口令为user2,默认表空间为USERS,在该表空间的配额为10 MB,初始状态为锁定。创建用户user3,口令为user3,默认表空间为USERS,在该表空间的配额为10 MB,概要文件为example_profile(假设该概要文件已经创建),为用户user2授予CREATE SESSION,CREATE TABLE ,CREATE VIEW系统权限。user2获得权限后,为用户user3授予CREATE TABLE权限。然后回收user2的CREATE TABLE权限。
SQL> conn system/oracle@orcl或者conn / as sysdba仅供参考,正确就行
SQL>CREATE USER user2IDENTIFIED BY user2
DEFAULT TABLESPACE USERS QUOTA 10M ON USERS
ACCOUNT LOCK;
SQL> CREATE USER user3 IDENTIFIED BY user3
DEFAULT TABLESPACE USERS
QUOTA 10M ON USERS
PROFILE example_profile ;
SQL>GRANT CREATE SESSION,CREATE TABLE,CREATE VIEW
TO user2 WITH ADMIN OPTION;
SQL> CONNECT user2/user2 @ORCL
SQL> GRANT CREATE TABLE TO user3;
SQL>conn system/oracle@orcl或者conn / as sysdba
SQL>revoke CREATE TABLE from user2;
5、使用EXPDP导出scott模式相关数据,并使用IMPDP将刚刚导出的scott模式相关数据导入到system模式,写出核心操作语句。
1、创建DIRECTORY:create directory dir_dp as 'D:/oracle/dir_dp';
2、授权 :Grant read,write on directory dir_dp to scott;
3、执行导出
expdpscott/tiger@orcl schemas=scott directory=dir_dpdumpfile =expdp_test1.dmp logfile=expdp_test1.log;
4、执行导入
impdp system/oracle@orcl directory=dir_dpdumpfile =expdp_test1.dmp remap_schema=scott:systemlogfile=impdp_test1.log;
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语句影响的行的副本