实 验 报 告
( 2012 / 2013 学年 第 一 学期)
数据库原理 课程名称 实验名称 1、数据库表的建立与管理 2、查询技术的应用
3、数据库的表中数据的操作 4、视图练习 实验时间 指导单位 指导教师 12月5、11月28、11月21 学生姓名 学院(系) 理学院
班级学号 专 业
数据库原理第一次实验
一、实验内容:
数据库表的建立与管理
二、实验目的:
学习数据库及表的建立、删除、更新等操作。
注:本次实验题目,除了特殊要求,以T-SQL为主,并将所有语句标注好题号,留存在查询界面上,方便检查。
三、实验题目:
1、创建一名为‘test’的数据库;
2.在“test”数据库中新建一张部门表 “部门”,输入列:name(CHAR,10位),ID(CHAR,7位),manager (CHAR,10位)各列均不能为空值。
3、在“test”数据库中新建一张员工表,命名为“员工”。在表中输入以下各列: name(CHAR,10位),persONID(CHAR,7位),Sex(CHAR,7位),birthday(datetime),deptID(CHAR,7位),各列均不能为空值。
4、修改表的操作练习:
1)将‘部门’表中的列ID设为主键;
2)将‘员工’表中persONID设为主键,并将deptID设置为外键,关联到‘部门’表上的‘ID’列;
3)在‘部门’表中,添加列quantity(CHAR, 5); 4) 删除‘员工’表中的列‘sex’;
5)修改‘员工’表中列name为(varCHAR,8)
5、1)在数据库test中新建表scores,输入以下列:ID (CHAR,8位) 主键, C语言numeric(3,1) ,IT英语 numeric(3,1) ,数据库 numeric(3,1) , 软件基础 numeric(3,1) ,平均成绩 。四门学科都不能为空,并且平均成绩为四门学科的平均分;
2)为表scores中的四项成绩添加default约束:使其默认值为0; 3)为表scores中的四项成绩添加check约束:是每项成绩在0到100之间。
6、删除department表,并删除数据库test。
四、实验过程 (1)、
CREATE DATABASE test USE test
(2)、
CREATE TABLE department (ID CHAR(7) NOT NULL, name CHAR(10) NOT NULL,
manager CHAR(10) NOT NULL)
(3)、 CREATE TABLE worker
(persONID CHAR(7) NOT NULL, name CHAR(10) NOT NULL, sex CHAR(7) NOT NULL, birthday datetime NOT NULL, deptID CHAR(7) NOT NULL)
(4)、 ALTER TABLE department ADD PRIMARY KEY(ID)
ALTER TABLE worker ADD PRIMARY KEY( persONID )
ALTER TABLE worker ADD constraint 外键约束 FOREIGN KEY(deptID) REFERENCES department(ID)
ALTER TABLE department ADD quantity CHAR(5) ALTER TABLE worker DROP COLUMN sex
ALTER TABLE worker ALTER COLUMN name varCHAR(8)
(5)、CREATE TABLE scores
(ID CHAR(8) PRIMARY KEY NOT NULL, C语言 numeric(3,1) NOT NULL, IT英语 numeric(3,1) NOT NULL, 数据库 numeric(3,1) NOT NULL, 软件基础 numeric(3,1) NOT NULL,
平均成绩 AS(C语言+IT英语+数据库+软件基础)/4)
ALTER TABLE scores ADD CONSTRAINT C语言_default DEFAULT'0'FOR C语言 ALTER TABLE scores ADD CONSTRAINT IT英语_default DEFAULT'0'FOR IT英语 ALTER TABLE scores ADD CONSTRAINT 数据库_default DEFAULT'0'FOR 数据库 ALTER TABLE scores ADD CONSTRAINT 软件基础_default DEFAULT'0'FOR 软件基础 ALTER TABLE scores ADD CONSTRAINT C语言 CHECK (C语言 BETWEEN 0 AND 100) ALTER TABLE scores ADD CONSTRAINT IT英语 CHECK (IT英语 BETWEEN 0 AND 100)
ALTER TABLE scores ADD CONSTRAINT 数据库 CHECK (数据库 BETWEEN 0 AND 100)
ALTER TABLE scores ADD CONSTRAINT 软件基础 CHECK (软件基础 BETWEEN 0 AND 100)
(6)、DROP table department casecade constraint 外键约束;
USE MASTER;
DROP DATABASE test;
五、
由以下可见,数据库test及表已建立完成
六 心得体会
删除department表的过程未能实现,命令不能删除外键,和伙伴讨论没有结果,不过打开建立的表就可以右键轻松删除了,其他的比较顺利。
数据库原理第二次实验
一、实验内容:
查询技术的应用
二、实验目的:
1、 2、 3、 4、 5、
掌握SELECT语句的基本语法 掌握连接查询的表示 掌握数据汇总的方法
掌握SELECT语句的GROUP BY子句的作用和使用方法 掌握SELECT语句的ORDER BY 子句的作用和使用方法
三、实验内容
1、创建员工管理数据库(compy)及相应的四张表:
Employees:员工信息表 Departments:部门信息表 Salary:员工薪水信息表 PurchASe:员工购物信息表
各表中属性的定义可根据表中的记录加以设定,均以编号为主键,例如可定义Departments表结构如下: 列名 部门编号 部门名称 备注 数据类型 char char text 长度 3 20 16 是否允许空值 否 否 是 说明 部门编号 主键 部门名称 备注
向表中填入数据
A、向Departments表中加入表2所示的记录 编号 1 2 3 4 5
B、向Employees表中加入表1所示的记录 编号 姓名 地址 邮编 电话 部门号 出生日期 性别 1956-1-1 1 1966-1-1 1 1972-1-1 1 1950-1-1 0 1962-1-1 0 1955-1-1 1 1969-1-1 1 1964-1-1 1 1967-1-1 1 部门名称 财务部 人力资源部 生产部 采购部 销售部 备注 NULL NULL NULL NULL NULL 000001 张晓强 010008 柳树 002001 许静 020018 李可 102201 张三丰 102208 白眉 108991 胡适 上海 230027 3333556 2 合肥 230027 3131359 1 北京 230026 3132359 1 武汉 230026 3693564 1 西安 123456 3635346 5 南京 123456 3458965 5 昆明 123456 4568921 3 111006 成吉思汗 海口 123456 3458145 5 210678 萧然 成都 123456 3454565 3 C、向Salary表中加入表3所示的记录 编号 000001 010008 002001 020018 102201 102208 108991 收入 2100 1582 2569 1987 2066 2980 3259 支出 123 88 185 79 108 210 281
111006 210678 2860 2347 198 180 D、向Purchase表中加入表4所示的记录 员工编号 000001 000001 002001 020018 108991 000001 020018 201678 020018
2、简单查询
(1)查询1956,1962,1964年出生的员工记录; (2)查询性别为1的员工记录;
(3)查询名字中包含‘白’字的所有雇员信息;
(4)查询不姓‘李’或者‘胡’,并且名字为三个字的雇员的记录(注:“姓名”
列的数据类型必须定义为varCHAR,想想为什么? )。
商品 01 03 01 03 11 11 01 02 11 购买数量 3 1 5 6 1 3 5 1 2 3、连接查询的使用
(1)查询每个雇员的情况以及其薪水情况
(2)查询收入高于编号为102201的员工收入的职工信息 4.数据汇总
(1)求财务部员工的平均净收入 (2)求财务部雇员的总人数
5.GROUP BY ,ORDER BY 子句的使用 (1)求各部门的雇员数
(2)将各雇员的情况按薪水由低到高排列
6、(选做题)查找比所有财务部的员工的收入都高的员工的姓名;
四、实验过程 Sql语言如下:
1、 CREATE DATABASE compy
use compy
CREATE TABLE Departments(
部门编号 CHAR(10) PRIMARY KEY NOT NULL, 部门名称 CHAR(20) NOT NULL, 备注 text );
CREATE TABLE Employees(
编号 CHAR(10) PRIMARY KEY NOT NULL, 姓名 VARCHAR(20) NOT NULL, 地址 CHAR(30) NOT NULL, 邮编 CHAR(10) NOT NULL, 电话 CHAR(11) NOT NULL, 部门号 CHAR(3) NOT NULL, 出生日期 DATE NOT NULL, 性别 CHAR(2) NOT NULL);
CREATE TABLE Salary(
编号 CHAR(10) PRIMARY KEY NOT NULL, 收入 INT default 0, 支出 INT default 0, );
CREATE TABLE Purchase(
员工编号 CHAR(10) NOT NULL, 商品 CHAR(3) NOT NULL, PRIMARY KEY(员工编号,商品) );
INSERT INTO Departments VALUES('1','财务部',NULL); INSERT INTO Departments VALUES('2','人力资源部',NULL); INSERT INTO Departments VALUES('3','生产部',NULL); INSERT INTO Departments VALUES('4','采购部',NULL); INSERT INTO Departments VALUES('5','销售部',NULL);
INSERT INTO Employees VALUES('000001','张晓强','上海','230027','3333556','2','1956-1-1','1') INSERT INTO Employees VALUES('010008','柳树','合肥','230027','3131359','1','1966-1-1','1')
INSERT INTO Employees VALUES('002001','许静','北京','230026','3132359','1','1972-1-1','1') INSERT INTO Employees VALUES('020018','李可','武汉','230026','3693564','1','1950-1-1','0') INSERT INTO Employees VALUES('102201','张三丰','西安','123456','3635364','5','1962-1-1','0') INSERT INTO Employees VALUES('102208','白眉','南京','123456','3458965','5','1955-1-1','1') INSERT INTO Employees VALUES('108991','胡适','昆明','123456','4568921','3','1969-1-1','1') INSERT INTO Employees VALUES('111006','成吉思汗','海口','123456','3458145','5','1964-1-1','1')
INSERT INTO Employees VALUES('210678','萧然','成都','123456','3454565','3','1967-1-1','1'); INSERT INTO Salary VALUES('000001','2100','123') INSERT INTO Salary VALUES('010008','1582','88') INSERT INTO Salary VALUES('002001','2569','185') INSERT INTO Salary VALUES('020018','1987','79') INSERT INTO Salary VALUES('102201','2066','108') INSERT INTO Salary VALUES('102208','2980','210') INSERT INTO Salary VALUES('108991','3259','281') INSERT INTO Salary VALUES('111006','2860','198') INSERT INTO Salary VALUES('210678','2347','180'); INSERT INTO Purchase VALUES('000001','01','3'); INSERT INTO Purchase VALUES('000001','03','1'); INSERT INTO Purchase VALUES('002001','01','5'); INSERT INTO Purchase VALUES('020018','03','6'); INSERT INTO Purchase VALUES('108991','11','1'); INSERT INTO Purchase VALUES('000001','11','3'); INSERT INTO Purchase VALUES('020018','01','5'); INSERT INTO Purchase VALUES('201678','02','1'); INSERT INTO Purchase VALUES('020018','11','2');
2、简单查询
SELECT * FROM Purchase SELECT *
FROM Employees
WHERE 出生日期 LIKE '%1956%' or 出生日期 LIKE '%1962%' or 出生日期 LIKE '%1964%';
SELECT * FROM Employees WHERE 性别='1';
SELECT * FROM Employees WHERE 姓名 LIKE '%白%'; SELECT *
FROM Employees
WHERE 姓名 not LIKE'李%' AND 姓名 not LIKE'胡%' AND len(姓名)=3;
3、连接查询的使用
SELECT Employees. *,Salary. 收入
FROM Employees inner join Salary on Employees.编号=Salary.编号; SELECT Employees. *,Salary. 收入
FROM Employees inner join Salary on Employees.编号=Salary.编号
WHERE 收入>(SELECT 收入 FROM Salary WHERE 编号='102201');
4.数据汇总
SELECT AVG(b.收入-b.支出) AS 财务部员工的平均净收入
FROM Employees AS a INNER JOIN Salary AS b ON a.编号=b.编号 WHERE 部门号='1';
SELECT COUNT(部门号)AS 财务部门总人数 FROM Employees WHERE 部门号='1';
5.GROUP BY ,ORDER BY 子句的使用
SELECT COUNT(a.部门号) AS 部门人数 ,b.部门名称
FROM Employees AS a JOIN Departments AS b ON a.部门号=b.部门编号 group by(部门名称); SELECT a.*,b.收入
FROM Employees AS a INNER JOIN Salary AS b ON a.编号=b.编号 order by 收入;
五、运行结果及选做题
(1)查询1956,1962,1964年出生的员工记录;
(2)查询性别为1的员工记录;
(3)查询名字中包含‘白’字的所有雇员信息;
(4)查询不姓‘李’或者‘胡’,并且名字为三个字的雇员的记录
(1)查询每个雇员的情况以及其薪水情况
(2)查询收入高于编号为102201的员工收入的职工信息
(1)求财务部员工的平均净收入
(2)求财务部雇员的总人数
(1)求各部门的雇员数
(2)将各雇员的情况按薪水由低到高排列
(选做题)查找比所有财务部的员工的收入都高的员工的姓名;
SELECT 姓名 FROM Employees WHERE 编号 IN (SELECT 编号 FROM Salary
WHERE 收入>All(SELECT 收入 FROM Salary
WHERE 编号 IN(SELECT 编号 FROM Employees WHERE 部门号='1'))) 运行结果:
数据库原理第三次实验
一、实验内容:
数据库的表中数据的操作。
二、实验目的:
1、学习SQL语句进行表中的数据的插入、更新和删除; 2、学会含有子查询语句的数据更新操作; 2、理解表中列的属性对表中数据的影响。
三、实验准备
试用上次实验创建的员工管理数据库(compy)及相应的四张表(具体见实验2):
Employees:员工信息表 Departments:部门信息表 Salary:员工薪水信息表 PurchASe:员工购物信息表
四、实验题目:
1、向Employees表中加入一列:年龄,其值为“当前时间”与“出生日期”差值(提示:年龄的计算可以使用getdate及year两个日期函数,具体使用参考联机丛书Transact SQL参考)。
2、数据更新:
1)将编号为102201的雇员地址改为“苏州”; 2)将编号为102208的雇员收入降低10%;
3)更改salary表,如果收入和支出的差值小于2000,则将收入提高1000;
3、使用SELECT…INTO进行多行插入:
将每个部门的编号,名称,雇员数,插入到新表DepartmentStatic中。
4、含子查询的数据更新
(1)将地址为合肥的雇员收入增加5%
(2)将收入小于平均收入的雇员的收入增加500元 (3)将财务部的雇员收入减少100 5、删除
删除DepartmentStatic中所有数据
6、(选做)
(1)将总收入大于6000的部门中的雇员收入减少5%
(2)删除收入大于平均收入的雇员的信息,包括Employees, Salary中相关的数据
五、实验过程
1、 UPDATE Employees SET 地址='苏州' WHERE 编号='102201'
SELECT * FROM Employees
2、 UPDATE Salary SET 收入=收入*0.9 WHERE 编号='102208'
UPDATE Salary SET 收入=收入+1000 WHERE abs(收入-支出)<2000
3、SELECT * FROM Salary
SELECT 部门编号,部门名称,备注 INto DepartmentStatic FROM Departments
SELECT * FROM DepartmentStatic
4、UPDATE Salary SET 收入=收入*1.05
WHERE 编号 IN (SELECT 编号 FROM Employees WHERE 地址='合肥'); UPDATE Salary SET 收入=收入+500
WHERE 收入<(SELECT AVG(收入) FROM Salary); UPDATE Salary SET 收入=收入-100
WHERE 编号 IN (SELECT 编号
FROM Employees,Departments
WHERE Employees.部门号=Departments.部门编号 and Departments.部门名称='财务部')
5、TRUNCATE TABLE DepartmentStatic /*删除*/
SELECT * FROM DepartmentStatic
六 运行结果及选做题
1、向Employees表中加入一列:年龄
2、数据更新
3、使用SELECT…INTO进行多行插入:
5、删除
选做6、
(1)将总收入大于6000的部门中的雇员收入减少5%
(2)删除收入大于平均收入的雇员的信息,包括Employees, Salary中相关的数据 程序 (1)
UPDATE Salary SET 收入=收入*0.95
WHERE 编号 IN (SELECT 编号 FROM Employees WHERE 部门号 IN(SELECT b.部门号
FROM Salary AS a JOIN Employees b ON a.编号=b.编号 GROUP BY 部门号
HAVING SUM(收入)>6000 ) );
(2)
DELETE FROM Employees
WHERE 编号 IN ( SELECT 编号 FROM Salary
WHERE 收入>(SELECT AVG(收入) FROM Salary) );
DELETE FROM Salary
WHERE 编号 IN ( SELECT 编号 FROM Salary
WHERE 收入>(SELECT AVG(收入) FROM Salary) );
数据库原理第四次实验
一、实验内容: 视图练习 二、实验目的:
1、练习视图的建立与使用; 2、理解视图的优点和作用。 三、实验准备:
创建员工管理数据库(company)及相应的四张表: Employees:员工信息表 Departments:部门信息表 Salary:员工薪水信息表
purchase表:购买信息表 四、实验题目:
1、建立视图
(1)建立视图view1, 查询所有财务部的职工的编号、姓名和工资收入,显示前5项, 并按照收入排序。
(2)建立视图view2,查询所有职工的职工编号、姓名和盈余;
(3)在建立视图view1上建立视图view3,要求为:所有财务部的,收入大于2000的职工编号、姓名和工资收入;
(4)建立市场部购买商品1的员工的信息的视图view4,并在视图view4上查询收入大于3000的员工信息;
(5)建立关于年龄小于40的所有员工的编号、姓名、电话、地址、年龄的视图view5;
(6)建立关于视图性别为‘1’的员工的编号、姓名、地址、电话、部门号、出生日期、性别的视图view6。
2、查询视图
(1)在视图view1上查询收入大于3000的财务部员工的信息;
(2)通过视图view2和表查询盈余最大的职工所在部门的部门号。
3、更新视图
(1)将视图view5中员工编号为‘ 002001’的电话改为‘8263137’; (2)在视图view6上添加一个新的员工记录: 010076 ,祝无双,青岛,3865730,2,1985-11-11,1
五、实验代码: 1
1).create view view1 as
select top 5 Employees.编号,姓名,收入 from Employees,Salary
where Employees.编号=Salary.编号 and 部门号='1'
2).create view view2 as
select Employees.编号,姓名,(收入-支出) as 盈余
3). create view view3 as
4).create view view4 as
5). create view view5 as
6). create view view6 as
select 编号,姓名,电话,地址,部门号,出生日期,性别 from Employees select 编号,姓名,电话,地址,年龄 from Employees
where 年龄<40; select * from Employees
where 部门号=5 and
编号 in (select 员工编号 from Purchase
where 商品='01');
select * from view1
where 收入>2000; from Employees,Salary
where Employees.编号=Salary.编号; order by 收入;
select * from view4,Salary
where view4.编号=Salary.编号
and 收入>3000;
2.
where 性别='1';
1). select * from view1
2). select 部门号 from Employees 3
1). update view5 set 电话='8263137'
2). insert into view6
六、实验运行及结果截图: (1)
values('010076','祝无双','青岛','3865730',2,'1985-11-11',1); select * from view6;
where 编号='002001';
where 编号=(select top 1 编号 from view2
order by 盈余 desc);
where 收入>3000;
(2)
(3)
(4)
(5)
(6)
2、查询视图
(1)
(2)
3、更新视图 (1)
(2)
实验心得:
这几次数据库实验是自己根据要求独立完成,由此,初步学会应用sql 2008软件,使用sql语句建立数据库、表,并进行增删改查一系列操作,收获颇丰。
当然,在操作过程中,遇到些问题,好比sql语句的设计,在进行查询删除时,系统也会出现错误,但在老师和同学的帮助下,找到了问题所在,并成功解决了。数据库是按照数据结构来组织、存储和管理数据的仓库,它在各个方面领域得到了广泛的应用。是一门很有用的学科。
尽管这些练习都是基础的数据库知识,但很必要,很高兴能通实验掌握了这些内容,学无止境,自己以后会再接再厉,不断取得进步。
因篇幅问题不能全部显示,请点此查看更多更全内容