数据库命令的基本考法

设有一个教师人员管理系统局部数据库,包括教师、职称两个关系模式。其中教师(Teacher)表结构如下:

职称(Position)表的结构如下:

1.用SQL语言定义教师(Teacher)表

create table teacher(
	TNo char(5) primary key,
	TName varchar(10) not null unique,
	TAge int default 20,
	TSex char(2) default '男',
	Title varchar(10),
	Foreign key (Title) References Position(Title)
);

2.利用关系代数实现查询:求王华老师的基本工资、岗位津贴。
ΠSalary,Allowance(σTname=(TeacherPosition))
3.用SQL语言实现查询:
(1)求各种职称教师的平均年龄。

Select Titile ,  Avg(TAge)
from Teacher
Group by Title;

(2)查询工资总额超过5000元的教师姓名。

select TName
from Teacher t , Position  p
where  t.Title = p.Title and (Salary + Allowance) > 5000

4.插入操作:将编号为10130,姓名为刘畅,职称为讲师的记录插入到教师表中。

insert into teacher(TNo, TName,Title) values ('10130','刘畅','讲师');

5.修改操作:将职称为“副教授”的岗位津贴改为1000。

update Position set Allowance = 1000 where Title = '副教授';

6.删除操作:将编号为10130的教师记录删除。

delete from Teacher where TNo = '101130';

7.授权操作:授予用户U1对教师表具有查询权限、对年龄属性有更新权限。

grant select,update(TAge) on table Teacher to U1;

8.收回权限操作:收回用户U1对教师表的年龄属性更新权限

revoke update(TAge) on table Teacher from U1;

9.创建存储过程实现计算全体学生某门功课的平均成绩的功能

命令:(包括存储定义及调用)
delimiter ||
<u> ________</u> p_avgscore(in cna varchar(30),out avgs decimal(3,1) ) -- 定义存储过程
begin
	select avg(score)  ________ -- 存储平时成绩
 	from sc b,course c
  	where b.cno = c.cno and  ________; -- 指定某门课程
end ||
delimiter ;
 ________p_avgscore('C语言',@avgs);   --调用存储过程
 ________@avgs '平均分';             -- 显示平均成绩
>

答案:

delimiter ||
create procedure p_avgscore(in cna varchar(30),out avgs decimal(3,1) ) -- 定义存储过程
begin
	select avg(score) into avgs
	from sc b,course c
	where b.cno = c.cno and cname = cna;
end ||
delimiter ;
call P_avgscore('C语言',@avgs);

10.创建带参数的存储的函数,实现计算全体学生某门功课的平均成绩的功能

命令:包括存储函数的定义以及调用
delimiter ||
 ________ f_avgscore(in cna varchar(30) )    ________decimal(3,1)-- 定义存储过程
begin
  	 ________ avgs decimal(3,1) --定义变量
  	select  ________  into avgs-- 存储平时成绩
	from sc b,course c
 	where   ________ and cname = cna;
    ________ avs;   -- 返回平时成绩
end ||
delimiter ;
——————f_avgscore('C语言');

答案:

delimiter ||
create function f_avgscore(in cna varchar(30) )   returns decimal(3,1)-- 定义存储过程
begin
  	declare avgs decimal(3,1)
 	select  avg(score) into avgs-- 存储平时成绩
	from sc b,course c
	where   b.cno = c.cno and cname = cna; -- 指定某门课程
    return  avs;
end ||
delimiter ;
select f_avgscore('C语言');

11.创建一个触发器实现更新分数时保留最高分

delimiter ||
create trigger update_score before update on sc  -- 定义触发器
for each row
begin
	if(new.score < old.score) then
		set new.score = old.score;
	end if;
end ||
delimiter ;

12.备份数据库

mysqldump -u user_name -p password db_name > D:\\beifen\\beifen2.sql;

13.恢复数据库

 1.在登录mysql的情况下:
  source  备份文件
 2. 在不登录的情况下
  mysql -u用户名 -p密码 库名 < 备份文件

查询树的启发式优化

(1)选择运算尽可能先做
(2)把投影运算和选择运算同时进行
(3)把投影与其前后的双目运算符结合起来
(4)把某些选择同在它前面执行的笛卡尔积结合起来成为一个连接运算
(5)找出公共子表达式

07-13 13:44