数据库实验: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语言实践-创建并维护关系模式,完成元组的增删改查的主要内容,如果未能解决你的问题,请参考以下文章

数据库-SQL查询语言(一)

关系数据库标准语言SQL02

关系数据库-----SQL标准语言

数据库实验一:数据定义与操作语言实验

在 SQL 2005 中使用模式的最佳实践?

oralce