mysql作业

必做题

1. 编写与图3.17中模式对应的 SQL DDL。对数据类型做任何合理的假设,并确保声明主键和外键。

范例:
1 create table person(
2     driver_id varchar( 50 ),
3 	  name varchar( 50 ),
4     address varchar( 50 ),
5     primary key (driver_id)
6 );
create table person ( 
	driver_id int, name varchar ( 50 ), 
    name varchar( 50 ),
	address varchar ( 50 ), 
	primary key ( driver_id ) 
);

create table car (
	license_plate varchar ( 10 ),
	model varchar ( 20 ),
	year date, 
	primary key ( license_plate )
);

create table accident ( 
	report_number int,
	year date, 
	location varchar ( 30 ), 
	primary key ( report_number ) 
);

create table owns (
	driver_id int,
	license_plate varchar ( 10 ),
	primary key ( driver_id ),
	foreign key ( driver_id ) references person(driver_id),
	foreign key ( license_plate ) references car ( license_plate ) 
);

create table participated (
	report_number int,
	license_plate varchar ( 10 ),
	driver_id int,
	damage_amount int,
	primary key ( report_number, license_plate ),
	foreign key ( report_number ) references accident( report_number ),
	foreign key ( license_plate ) references car ( license_plate )
);

2. 考虑图3.19中的员工数据库,其中主键被下划线标示。用 SQL 为下面的每个查询给出一个表达式

请添加图片描述

a. 查找与所在公司所在城市相同的每个员工的 ID 和姓名。
b. 找到与经理住在同一个城市和同一条街上的每个员工的身份证和姓名。
c. 查找每个工资高于公司所有员工平均工资的员工的 ID 和姓名。
d. 找出工资最少的公司。
a. 查找与所在公司所在城市相同的每个员工的 ID 和姓名。
select employee.ID,person_name
from employee,company,work
where employee.ID=work.ID and
employ.city=company.city and
company.company_name=work.company_name;
b. 找到与经理住在同一个城市和同一条街上的每个员工的身份证和姓名。
select employee.ID,person_name
from employ,manages,works,company
where employ.ID=manages.ID and
manages.street=employ.street and
manages.city=employ.city;
c. 查找每个工资高于公司所有员工平均工资的员工的 ID 和姓名。
select employee.ID,person_name
from employee as ep,works as w
where ey.ID=w.ID and
w.salary<(select AVG(w.salary) from emploee as e where e.salary = er.salary);
d. 找出工资最少的公司。
select c.company_name 
from works as w, company as c 
where c.company_name = w.company_name and 
w.salary <= (select min(wr.salary) from wr as works where wr.salary = w .salary);

3.

1 classroom(building, roomnumber, capacity)
2 department(deptname, building, budget)
3 course(courseid, title, deptname, credits)
4 instructor(ID, name, deptname, salary)
5 section(courseid, secid, semester, year, building, roomnumber, timesl
otid)
6 teaches(ID, courseid, secid, semester, year)
7 student(ID, name, deptname, totcred)
8 takes(ID, courseid, secid, semester, year, grade)
9 advisor(sID, iID)
10 time slot(time slotid, day, starttime, endtime)
11 prereq(courseid, prereqid)

考虑到上面的数据库,使用SQL语言编写以下查询。

1. 找到所有讲师的部门名称;
2. 找到计算机科学系所有年薪超过70,000美元的讲师的名字;
3. 找到所有讲师的名字,连同他们的部门名称和部门大楼名称;
4. 找出所有在生物系中薪水超过至少一名教员的教员的名字;
5. 查找其大楼名称包含子字符串‘Watson’的所有部门的名称;
6. 使用 union 属性,找到 2009 年秋季或 2010 年春季或两者授课的所有课程集;
7. 找到所有出现在教员关系中且薪水为空值的教员;
1 select distinct deptname from instructor;
2. 找到计算机科学系所有年薪超过70,000美元的讲师的名字;
select distinct i.deptname 
from instructor as i 
where i.instructor like '%计算机科学%' and 
i.salary >=70000;
3. 找到所有讲师的名字,连同他们的部门名称和部门大楼名称;
select distinct i.name, i.dept_name, d.building 
from instructor as i,department as d, d join i on deptname 
where d.dept_name = i.dept_name;
4. 找出所有在生物系中薪水超过至少一名教员的教员的名字;
select distinct i.name
from instructor as i, instructor as t
where i.salary > t.salary and t.deptname =  '生物系'
5. 查找其大楼名称包含子字符串‘Watson’的所有部门的名称;
select d.deptname 
from department as d 
where d.building = '%Watson%'
6. 使用 union 属性,找到 2009 年秋季或 2010 年春季或两者授课的所有课程集;
(select courseid
    from  section
    where semester = 'Fall' and year = 2009)
union
(select courseid
    from  section
    where semester = 'Spring' and year = 2010);
7. 找到所有出现在教员关系中且薪水为空值的教员;
select i.name from instructor as i where i.salary is null;

选做题

1.

( 1 )检查下表是否符合 1NF 规范,如果不是请改进,

EMP_PHONE中包含了两个信息,可以改为EMP_PHONE1和EMP_PHONE2

( 2 )检查下表是否符合 2NF 规范,如果不是请改进,

请添加图片描述

对于SUBJECT可以通过TEACHER_ID来确定,因此在这里#TEACHER_AGE显得多余

可以将SUBJECT表进行拆分消除依赖

( 3 )检查下表是否符合 3NF 规范,如果不是请改进,

请添加图片描述

EMP_STATE与EMP_CITY之间存在依赖关系

删除EMP_STATE,将EMP_STATE与EMP_CITY单独拆分成独立表

2. 构造一个B+树,包含以下键值:﴾2、 3 、 5 、 7 、 11 、 17 、 19 、 23 、 29 、31﴿,假设树最初是空的,值是按升序添加的,不会告诉你阶层为 4 比较合适的 ,画图!需要画出每一步!。

请添加图片描述
请添加图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值