数据库实验:SQL语言实践-创建并维护关系模式,完成元组的增删改查
Posted 二琳爱吃肉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库实验:SQL语言实践-创建并维护关系模式,完成元组的增删改查相关的知识,希望对你有一定的参考价值。
第一部分:SQL语言实践
实验内容提要:
用SQL语言完成创建关系模式、维护关系模式,完成元组的增删改查等操作。
(一)实验目的
1、了解某个关系数据库管理系统(例如:mysql、SQL Server、Oracle等)的基本操作。
2、熟练掌握SQL数据定义语句,能够熟练使用SQL数据定义语句创建、修改及删除关系模式。
3、熟练掌握SQL数据操纵语句,能够熟练使用SQL数据操纵语句插入、修改及删除元组。
4、熟练掌握SQL数据查询语句,能够熟练使用SQL数据查询语句实现数据基本查询,包括单表查询、统计查询、连接查询及嵌套查询等。
(二)实验内容
1、创建关系模式
(1)职工表employee,其结构为(职工号ssn char(18),职工名name char(10),生日bdate char(10),地址address char(30),性别sex char(2),薪水salary float,直接领导人职工号superssn char(18) ,部门号dno char(3)),其中职工号为主码,其它属性值要求非空。
源码:
create table employee(
ssn char(18) primary key,
name char(10),
bdate char(10),
address char(30),
sex char(2),
salary float,
superssn char(18),
dno char(3)
);
建表成功:
(2)部门表department,其结构为(部门号dnumber char(3),部门名dname varchar(30),部门经理职工号mgrssn char(18),部门经理受雇日期mgrstartdate date),其中部门号为主码,其它属性值要求非空。
源码:
CREATE Table department(
dnumber char(3) NOT NULL PRIMARY KEY,
dname varchar(30) NOT NULL,
mgrssn char(18) NOT NULL,
mgrstartdate date NOT NULL
);
建表成功:
(3)部门地址表depart_location,其结构为(部门号dnumber char(3),部门地址dlocation varchar(30)),其中部门号为主码,其它属性值要求非空。
源码:
CREATE Table depart_location(
dnumber char(3) NOT NULL PRIMARY KEY,
dlocation varchar(30) NOT NULL
);
建表成功:
(4)项目表project,其结构为(项目号pnumber char(3),项目名pname varchar(30),项目所在地plocation varchar(30),项目隶属部门号dnum char(3)),其中项目号为主码,其它属性值要求非空。
源码:
CREATE Table project(
pname varchar(30) NOT NULL,
pnumber char(3) NOT NULL PRIMARY KEY,
plocation varchar(30) NOT NULL,
dnum char(30) NOT NULL
);
建表成功:
(5)职工参与项目表works_on,其结构为(职工号essn char(18),项目号pno char(3),工作时间hours int),其中(职工号,项目号)为主码,其它属性值要求非空。
源码:
CREATE Table works_on(
essn char(18) NOT NULL,
pno char(3) NOT NULL,
PRIMARY KEY(essn,pno),
hours int NOT NULL
);
建表成功:
(6)家属表dependent,其结构为(职工号essn char(18),家属名dependent_name char(10),性别sex char(2),生日bdate char(10),与职工关系relationship char(10)),其中(职工号,家属名)为主码,其它属性值要求非空。
源码:
CREATE Table dependent(
essn char(18) NOT NULL,
dependent_name char(10) NOT NULL,
sex char(2) NOT NULL,
bdate char(10) NOT NULL,
relationship char(10) NOT NULL,
PRIMARY KEY(essn,dependent_name)
);
建表成功:
建表部分完整源码:
create table employee(
ssn char(18) primary key,
name char(10),
bdate char(10),
address char(30),
sex char(2),
salary float,
superssn char(18),
dno char(3)
);
CREATE Table department(
dnumber char(3) NOT NULL PRIMARY KEY,
dname varchar(30) NOT NULL,
mgrssn char(18) NOT NULL,
mgrstartdate date NOT NULL
);
CREATE Table depart_location(
dnumber char(3) NOT NULL PRIMARY KEY,
dlocation varchar(30) NOT NULL
);
CREATE Table project(
pname varchar(30) NOT NULL,
pnumber char(3) NOT NULL PRIMARY KEY,
plocation varchar(30) NOT NULL,
dnum char(30) NOT NULL
);
CREATE Table works_on(
essn char(18) NOT NULL,
pno char(3) NOT NULL,
PRIMARY KEY(essn,pno),
hours int NOT NULL
);
CREATE Table dependent(
essn char(18) NOT NULL,
dependent_name char(10) NOT NULL,
sex char(2) NOT NULL,
bdate char(10) NOT NULL,
relationship char(10) NOT NULL,
PRIMARY KEY(essn,dependent_name)
);
2、为上述关系模式分别插入如下数据:
(1)职工表:employee
ssn | name | bdate | address | sex | salary | superssn | dno |
230101198009081234 | 张三 | 1980-09-08 | 哈尔滨道里区十二道街 | 男 | 3125 | 23010119751201312X | d1 |
230101198107023736 | 李四 | 1981-07-02 | 哈尔滨道外区三道街 | 男 | 2980 | 23010119751201312X | d1 |
23010119751201312X | 张红 | 1975-12-01 | 哈尔滨南岗区三十道街 | 男 | 4260 | 23010119751201312X | d1 |
230101198204078121 | 王二 | 1982-04-07 | 哈尔滨动力区六十道街 | 男 | 2890 | 23010119751201312X | d1 |
23010119950101XXXX | 灰太狼 | 1995-01-01 | 青青草原狼堡 | 男 | 1200 | 23010119960101XXXX | d2 |
23010119960101XXXX | 红太狼 | 1996-01-01 | 青青草原狼堡 | 女 | 3600 | 23010119960101XXXX | d2 |
23010120050101XXXX | 喜羊羊 | 2005-01-01 | 青青草原大肥羊学校 | 男 | 1000 | 23010120050101XXXX | d3 |
XXXXXXXXXXXXXXXXXX | 超人 | 3000-01-01 | 外星 | 男 | 100000 | 23010120050101XXXX | d4 |
源码:
INSERT INTO employee (ssn,name,bdate,address,sex,salary,superssn,dno) VALUES
('230101198009081234','张三','1980-09-08','哈尔滨道里区十二道街','男',3125,'23010119751201212X','d1'),
('230101198107023736','李四','1981-07-02','哈尔滨道外区三道街','男',2980,'23010119751201212X','d1'),
('23010119751201312X','张红','1975-12-01','哈尔滨南岗区三十道街','男',4260,'23010119751201212X','d1'),
('230101198204078121','王二','1982-04-07','哈尔滨动力区六十道街','男',2890,'23010119751201212X','d1'),
('23010119950101XXXX','灰太狼','1995-01-01','青青草原狼堡','男',1200,'23010119960101XXXX','d2'),
('23010119960101XXXX','红太狼','1996-01-01','青青草原狼堡','女',3600,'23010119960101XXXX','d2'),
('23010120050101XXXX','喜羊羊','2005-01-01','青青草原大肥羊学校','男',1000,'23010120050101XXXX','d3'),
('XXXXXXXXXXXXXXXXXX','超人','3000-01-01','外星','男',10000,'23010120050101XXXX','d4');
插入数据成功如图:
(2)部门表:department
dnumber | dname | mgrssn | mgrstartdate |
d1 | 研发部 | 23010119751201312X | 2008-01-01 |
d2 | 捕羊部 | 23010119960101XXXX | 2006-01-01 |
d3 | 防狼部 | 23010120050101XXXX | 2006-01-01 |
d4 | 全能部 | XXXXXXXXXXXXXXXXXX | 3000-01-01 |
源码:
INSERT INTO department VALUES
('d1','研发部','23010119751201312X','2008-01-01'),
('d2','捕羊部','23010119960101XXXX','2006-01-01'),
('d3','防狼部','23010120050101XXXX','2006-01-01'),
('d4','全能部','XXXXXXXXXXXXXXXXXX','3000-01-01');
插入数据成功实例:
(3)部门地址表depart_location
dnumber | dlocation |
d1 | 哈尔滨 |
d2 | 青青草原 |
d3 | 青青草原 |
d4 | 地球 |
源码:
INSERT INTO depart_location VALUES
('d1','哈尔滨'),
('d2','青青草原'),
('d3','青青草原'),
('d4','地球');
(4)项目表:project
pname | pnumber | plocation | dnum |
研究项目1 | p1 | 哈尔滨 | d1 |
哈同公路 | p2 | 哈尔滨 | d1 |
立交桥 | p3 | 哈尔滨 | d1 |
机场建设 | p4 | 哈尔滨 | d1 |
抓羊 | p5 | 青青草原 | d2 |
吃羊 | p6 | 青青草原 | d2 |
防狼 | p7 | 青青草原 | d3 |
源码:
INSERT INTO project VALUES
('研究项目1','p1','哈尔滨','d1'),
('哈同公路','p2','哈尔滨','d1'),
('立交桥','p3','哈尔滨','d1'),
('机场建设','p4','哈尔滨','d1'),
('抓羊','p5','青青草原','d2'),
('吃羊','p6','青青草原','d2'),
('防狼','p7','青青草原','d3');
(5)员工参与项目表:works_on
essn | pno | hours |
23010119751201312X | p1 | 100 |
23010119751201312X | p2 | 90 |
23010119751201312X | p3 | 85 |
23010119751201312X | p4 | 100 |
230101198009081234 | p1 | 65 |
230101198009081234 | p2 | 76 |
230101198009081234 | p3 | 67 |
230101198107023736 | p2 | 89 |
230101198107023736 | p3 | 79 |
230101198107023736 | p4 | 91 |
230101198204078121 | p2 | 23 |
230101198204078121 | p3 | 36 |
23010119950101XXXX | p2 | 11 |
23010119950101XXXX | p5 | 100 |
23010119950101XXXX | p6 | 100 |
23010119960101XXXX | p5 | 100 |
23010119960101XXXX | p6 | 100 |
23010120050101XXXX | p7 | 100 |
XXXXXXXXXXXXXXXXXX | p1 | 100 |
XXXXXXXXXXXXXXXXXX | p2 | 100 |
XXXXXXXXXXXXXXXXXX | p3 | 100 |
XXXXXXXXXXXXXXXXXX | p4 | 100 |
XXXXXXXXXXXXXXXXXX | p5 | 100 |
XXXXXXXXXXXXXXXXXX | p6 | 100 |
XXXXXXXXXXXXXXXXXX | p7 | 100 |
源码:
INSERT INTO works_on VALUES
('23010119751201312X','p1',100),
('23010119751201312X','p2',90),
('23010119751201312X','p3',85),
('23010119751201312X','p4',100),
('230101198009081234','p1',65),
('230101198009081234','p2',76),
('230101198009081234','p3',67),
('230101198107023736','p2',89),
('230101198107023736','p3',79),
('230101198107023736','p4',91),
('230101198204078121','p2',23),
('230101198204078121','p3',36),
('23010119950101XXXX','p2',11),
('23010119950101XXXX','p5',100),
('23010119950101XXXX','p6',100),
('23010119950101XXXX','p5',100),
('23010119950101XXXX','p6',100),
('23010120050101XXXX','p7',100),
('XXXXXXXXXXXXXXXXXX','p1',100),
('XXXXXXXXXXXXXXXXXX','p2',100),
('XXXXXXXXXXXXXXXXXX','p3',100),
('XXXXXXXXXXXXXXXXXX','p4',100),
('XXXXXXXXXXXXXXXXXX','p5',100),
('XXXXXXXXXXXXXXXXXX','p6',100),
('XXXXXXXXXXXXXXXXXX','p7',100);
(6)家属表:dependent
essn | dependent_name | sex | bdate | relationship |
230101198009081234 | 张三妻 | 女 | 1983-09-02 | 配偶 |
230101198009081234 | 张三儿 | 男 | 2005-01-01 | 父子 |
23010119950101XXXX | 小灰灰 | 男 | 2009-01-01 | 父子 |
23010119960101XXXX | 小灰灰 | 男 | 2009-01-01 | 母子 |
源码:
INSERT INTO dependent VALUES
('230101198009081234','张三妻','女',1983-09-02,'配偶'),
('230101198009081234','张三儿','男',2005-01-01,'父子'),
('23010119950101XXXX','小灰灰','男',2009-01-01,'父子'),
('23010119960101XXXX','小灰灰','男',2009-01-01,'父子');
3、完成下列查询
(1)查询参加了“p2”项目的职工号。
SELECT essn FROM works_on WHERE pno = 'p2';
(2)查询参加了项目名为“哈同公路”的职工数量。
SELECT COUNT(essn) FROM works_on WHERE pno in (SELECT pnumber FROM project WHERE pname = '哈同公路');
(3)查询在“研发部”工作且工资低于3000元的职工名字和地址。
select name,address from employee where salary<3000 and dno=(select dnumber from department where dname='研发部');
(4)查询没有参加项目“p1”的职工姓名。
select name from employee where ssn not in (select essn from works_on where pno='p1');
(5)查询没有家属的职工名字。
SELECT name FROM employee WHERE ssn NOT in (SELECT essn FROM dependent);
(6)查询由“张红”领导的职工的姓名和所在部门的名字。
SELECT name,dname FROM department INNER JOIN employee on dno = dnumber WHERE superssn in (SELECT ssn FROM employee WHERE name = '张红');
(7)查询至少参加了3个项目的职工号。
SELECT distinct essn FROM works_on WHERE essn in (SELECT essn FROM works_on GROUP BY essn HAVING COUNT(pno) >= 3);
(8)查询至少参加了项目“p1”和项目“p2”的职工号。
SELECT distinct first.essn FROM works_on first, works_on second WHERE first.pno ='p1' AND second.pno='p2';
(9)查询参加了全部项目的职工号和姓名。
SELECT ssn,name FROM employee WHERE ssn in (SELECT COUNT(pnumber) FROM project);
(10)在参加了“p2”项目的职工中,查询比职工“张三”的酬金低的职工姓名 。
select name from employee where salary(select from employee where name='张三') and ssn in (select essn from works_on where pno='p2');
(11)查询这样的职工姓名,该职工参加了“张三”没有参加的某个项目。
select distinct name from employee,works_on where ssn=essn and pno in (select pnumber from project where pnumber not in (select pno from works_on,employee where name='张三' and essn=ssn));
(12)查询这样的职工姓名,该职工至少参加了王二参加的所有项目(不列出王二)。
select name from employee where name='张三' and not exists(
select * from works_on a where essn=(select ssn from employee where name='王二')
and not exists (select * from works_on b where b.ssn and b.pno=a.pno));
(13)查询这样的职工姓名和他在项目中的平均工作时间,该职工至少参加了两个项目,并且在这两个项目中的工作时间都不低于100小时。
select name.avg(hours) from employee,works_on where
ssn=essn and essn in (select distinct a.essn from works_on a.works_on b where a.essn=b.essn and a.pno!=b.bno and a.hours>=100 and b.hours>=100)
group by name;
(14)查询这样的职工姓名,该职工至少参加了三个部门的项目。
select name from employee where ssn in (select essn from works_on,project where pno=pnumber group by essn having count(distinct dnum)>=3);
(15)查询至少参加了项目“P1”、项目“P2”和项目“P3”的职工姓名。
select name from employee where ssn in (select essn from works_on a,works_on n,works_on c where a.essn=b.essn and a.essn=c.essn and a.pno= ='p1' and b.pno='p2' and c.pno='p3');
4、关系模式及数据的维护
(1)为dependent表添加工作单位和职业两个属性。
alter table department and 职业 char(10);
(2)为工作单位和职业这两个属性添加值。
(3)把employee表中所有职工的工资改为3000元。
(4)把dependent表中“230101198009081234”的家属张三妻的职业改为“教师”。
(5)把研究部的职工工资提高10%。
update employee set salary =salsry*1.1 where dno=(select dnumber from department where dname='研发部');
(6)删除dependent表中职工“23010119950101XXXX”的家属。
DELETE FROM dependent WHERE essn = '23010119950101XXXX';
(7)删除在研究部工作的职工信息。
DELETE FROM employee WHERE dno = (SELECT dnumber FROM department WHERE dname = '研发部');
(8)分别删除工作单位和职业属性。
ALTER Table dependent drop workunits,drop professional;
妈耶,敲完实验头发要掉光了,害。觉得有用就点个赞吧~点赞是我的创作动力
以上是关于数据库实验:SQL语言实践-创建并维护关系模式,完成元组的增删改查的主要内容,如果未能解决你的问题,请参考以下文章