数据库实验.docx

上传人:b****5 文档编号:7967615 上传时间:2023-01-27 格式:DOCX 页数:19 大小:28.50KB
下载 相关 举报
数据库实验.docx_第1页
第1页 / 共19页
数据库实验.docx_第2页
第2页 / 共19页
数据库实验.docx_第3页
第3页 / 共19页
数据库实验.docx_第4页
第4页 / 共19页
数据库实验.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

数据库实验.docx

《数据库实验.docx》由会员分享,可在线阅读,更多相关《数据库实验.docx(19页珍藏版)》请在冰豆网上搜索。

数据库实验.docx

数据库实验

数据库原理实验指导

实验前准备:

请设计一个企业销售管理据库,其中需要保存的信息如下:

员工信息,包括:

员工编号、员工姓名、性别、所属部门、职称、到职日、生日、薪水、填表日期;

客户信息,包括:

客户号,客户名称,客户住址,客户电话、邮政编码;

产品信息,包括:

产品编号,产品名称;

员工和客户可以签订订单,每签订一个订单,就要保存订单信息,包括:

订单编号、客户号、业务员编号、订单金额、订货日期、出货日期、发票号码。

此外,每个订单可能涉及到多种产品,每种产品可能被多个订单订购。

因此需要每个订单中每类产品的销售明细,包括每种产品的销售数量、单价、订单日期;

要求:

(1)给出系统的ER图(可以用word或其它画图工具,如Visio画),要求画出所有的实体,联系,属性以及联系的类型;

(2)将ER图转换为关系模型;

实验一

实验名称:

数据定义(2课时)

一、实验目的

1、理解数据库模式的概念,通过使用SQLSERVER企业管理器或者MySql建立数据库和基本表。

模式为人事表、客户表、销售表、销售明细表、产品表。

熟悉SQLSERVER企业管理器的使用,并将得到的表生成脚本,然后保存。

2、理解上述基本表之间的关系,建立关系表。

3、掌握修改表结构的基本方法

4、掌握索引和视图的创建方法

二、实验环境

MSSQLSERVER或者MySql。

三、实验内容与步骤

1、建立一个数据库和五张表的表结构。

(1)/*员工人事表employee*/

emp_no

char(5)

Notnull

primarykey

员工编号

emp_name

char(10)

Notnull

员工姓名

sex

char

(1)

Notnull

性别

dept

char(4)

null

所属部门

title

char(6)

null

职称

date_hired

datetime

null

到职日

birthday

datetime

Null

生日

salary

int

null

薪水

addr

char(50)

null

住址

Mod_date

datetime

Default(getdate())

操作日期

Createdatebasesale;

createtableemployee(

emp_nochar(5)Notnullprimarykey,

emp_namechar(10)Notnull,

sexchar

(1)Notnull,

deptchar(4)null,

titlechar(6)null,

date_hireddatetimenull,

birthdaydatetimenull,

salaryintnull,

addrchar(50)null,

Mod_datedatetimeDefault0,

constraintc1check(性别in('男','女'))

);

(2)/*客户表customer*/

cust_id

char(5)

Notnull

primarykey

客户号

cust_name

char(20)

Notnull,

客户名称

addr

char(40)

Notnull,

客户住址

tel_no

char(10)

Notnull,

客户电话

zip

char(6)

null

邮政编码

createTABLEcustomer(

cust_idchar(5)Notnullprimarykey,

cust_namechar(20)Notnull,

addrCHAR(40)Notnull,

tel_nochar(10)Notnull,

zipchar(6)null

);

(3)/*销售主表sales*/

order_no

Char(5)

Notnull

primarykey

订单编号

cust_id

char(5)

Notnull,

客户号

sale_id

char(5)

Notnull,

业务员编号

tot_amt

numeric(9,2)

null,

默认0

订单金额

order_date

datetime

null,

订货日期

ship_date

datetime

null,

出货日期

invoice_no

char(10)

null

发票号码

createTABLEsales(

order_nochar(5)Notnullprimarykey,

cust_idchar(5)Notnull,

sale_idCHAR(5)Notnull,

tot_amtnumeric(9,2)null,

order_datedatetimenull,

ship_datedatetimenull,

invoice_nochar(10)null

);

(4)/*销货明细表sales_item*/

order_no

Char(5)

Notnull,

primarykey

订单编号

prod_id

char(5)

Notnull,

产品编号

qty

int

Notnull

默认0

销售数量

unit_price

numeric(9,2)

Notnull

默认0

单价

order_date

datetime

null

订单日期

createTABLEsales_item(

order_nochar(5)Notnull,

prod_idchar(5)Notnull,

primarykey(order_no,prod_id),

qtyINTNotnull,

unit_pricenumeric(9,2)Notnull,

order_datedatetimenull,

CONSTRAINTFK_1FOREIGNkey(order_no)REFERENCESsales(order_no),

CONSTRAINTFK_2FOREIGNkey(prod_id)REFERENCESproduct(prod_id)

);

(5)/*产品名称表product*/

prod_id

char(5)

Notnull

primarykey

产品编号

prod_name

char(20)

Notnull

产品名称

createTABLEproduct(

prod_idchar(5)Notnullprimarykey,

prod_namechar(20)Notnull

);

2、建立5张表的关系图

3、修改表结构,通过SQL语句修改表约束。

①?

在表employee加入CHECK约束:

输入的员工编号必须以E开头的5位数编号,性别只能为M/F。

//check对于MySQL不起作用,只能在插入数据的基础上修改

usesale;

ALTERTABLEemployeeaddCHECK(sexLIKE'E%');

UPDATEemployee

SETsex='F'

WHEREsex='女'

;

UPDATEemployee

SETsex='M'

WHEREsex='男'

;

为销售主表sales中的发票编号字段建立UNIQUE约束。

ALTERTABLEsalesMODIFYinvoice_noCHAR(10)UNIQUENULL;

所有性别属性,限制取值为f或m

4、员工表建立唯一索引:

emp_no属性、升序;员工表建立聚集索引:

emp_name属性、升序;

CREATEUNIQUEINDEXemp_indexONemployee(emp_noASC);

//MYSQL不支持此类语法

5、创建视图:

①?

视图只含上海客户信息,即客户号、客户姓名、住址。

CREATEVIEW上海客户信息AS

SELECTcust_id,cust_name,addr

FROMcustomer

WHEREaddrLIKE'上海%';

有两个基本表employee和sales,创建一个视图,该视图包含相同业务员的编号、姓名、订单号、销售总金额。

CREATEVIEWemp_salesAS

SELECTsale_id,emp_name,order_no,tot_amt

FROMemployee,sales

WHEREemployee.emp_no=sales.sale_id;

四、实验报告

实验二

实验名称:

数据操纵(4课时)

一.实验目的

1、要求学生熟练掌握添加、修改、删除数据的操作。

2、要求学生熟练掌握数据查询操作。

二、实验环境

MSSQLSERVER2000或者MySQL

三、实验内容与步骤

1.数据更新

①在每个表中插入若干条记录;

--employee

INSERTemployeeVALUES('E0001','赵三','男','销售部','经理','2013/3/4','1992/3/4',8000,'杭州','2013/4/2');

INSERTintoemployeevalues('E0002','赵四','M','销售部','成员','2017/3/5','1994/2/3',2500,'泰州','2018/4/2');

INSERTemployeeVALUES('E0003','钱四','男','销售部','组长','2015/3/4','1991/3/4',8000,'杭州','2015/4/2');

INSERTemployeeVALUES('E0004','钱行','男','后勤部','经理','2014/8/4','1981/9/8',10000,'杭州','2015/4/2');

INSERTemployeeVALUES('E0005','欧阳泽明','男','后勤部','组长','2016/8/4','1986/7/8'7000,'杭州','2017/4/2');

INSERTemployeeVALUES('E0006','欧阳凤','女','后勤部','成员','2012/5/4','1989/3/5',7000,'杭州','2016/4/2');

INSERTemployeeVALUES('E0007','欧阳峰','男','宣传部','副经理','2013/5/4','1989/3/9',9000,'泰州','2016/4/2');

INSERTemployeeVALUES('E0008','欧阳创正','男','宣传部','成员','2017/8/8','1999/7/25',4000,'泰州','2016/4/2');

INSERTemployeeVALUES('E0009','王阳凤','女','宣传部','经理','2012/7/13','1985/3/6',9090,'杭州','2016/4/2');

INSERTemployeeVALUES('E0010','王航','女','联络部','成员','2017/5/4','1997/8/15',4000,'扬州','2016/4/2');

INSERTemployeeVALUES('E0011','王凤','女','联络部','经理','2015/7/13','1989/3/6',9090,'扬州','2016/4/2');

INSERTemployeeVALUES('E0012','王立','男','联络部','副经理','2013/8/14','1989/5/19',9000,'泰州','2016/4/2');

--customer

--sales

--product

INSERTproductVALUES('C0001','短袖');

INSERTproductVALUES('C0002','短裤');

INSERTproductVALUES('C0003','长袖');

INSERTproductVALUES('C0004','牛仔裤');

INSERTproductVALUES('C0005','七分裤');

INSERTproductVALUES('C0006','五分裤');

INSERTproductVALUES('C0007','外套');

INSERTproductVALUES('C0008','短裙');

INSERTproductVALUES('C0009','连衣裙');

INSERTproductVALUES('C0010','衬衫');

--sales_item

INSERTsales_itemVALUES('S0010','C0001',77,1,'2018/5/9');

INSERTsales_itemVALUES('S0009','C0002',146,12,'2018/5/9');

INSERTsales_itemVALUES('S0008','C0003',126,18,'2018/5/9');

INSERTsales_itemVALUES('S0007','C0004',124,9,'2018/5/9');

INSERTsales_itemVALUES('S0006','C0005',128,12,'2018/5/9');

INSERTsales_itemVALUES('S0005','C0006',124,42,'2018/5/9');

INSERTsales_itemVALUES('S0004','C0007',446,52,'2018/5/9');

INSERTsales_itemVALUES('S0003','C0008',846,12,'2018/5/9');

INSERTsales_itemVALUES('S0002','C0009',1277,22,'2018/5/9');

INSERTsales_itemVALUES('S0001','C0010',2240,30,'2018/5/9');

将所有员工的薪水增加100;

UPDATEemployeeSETsalary=salary+100;

将产品名称为'A'的产品的单价改为10//A为短袖

UPDATEsales_item

SETunit_price=10

WHEREprod_id=(

SELECTprod_id

FROMproduct

WHEREprod_name='短袖');

删除所有女性员工销售记录;

DELETEsales_item

FROMsales

LEFTJOINemployeeONsales.sale_id=employee.emp_no

INNERJOINsales_itemONsales.order_no=sales_item.order_no

WHEREsex='f';

DELETEsales

FROMsales

LEFTJOINemployeeONsales.sale_id=employee.emp_no

WHEREsex='f';

删除订单金额小于100000的订单。

//小于6000的订单

DELETEFROMsales_item

WHEREorder_noIN(

SELECTorder_no

FROMsales

WHEREtot_amt<6000);

DELETEFROMsales

WHEREtot_amt<6000;

删除sales表中作废的订单(其发票号码为I000000004)。

(注意:

约束)

DELETEFROMsales_item

WHEREorder_noIN(

SELECTorder_no

FROMsales

DELETEFROMsales

2.数据查询

(1)查找所有经理的姓名、职称、薪水。

SELECTemp_name,title,salary

FROMemployee

WHEREtitle='经理';

(2)找出姓“王”并且姓名的最后一个字为“功”的员工。

//最后一个字为凤

SELECTemp_name

FROMemployee

WHEREemp_nameLIKE'王%'ANDemp_nameREGEXP'凤$';

(3)查找住在上海或北京的女员工,并显示其姓名、所属部门、职称、住址。

INSERTemployeeVALUES('E0013','王张','f','后勤部','成员','2013/8/14','1989/2/11',5600,'北京','2016/4/2');

INSERTemployeeVALUES('E0014','顾郝康','f','销售部','成员','2013/8/14','1989/5/21',6000,'上海','2016/4/2');

//插入两条数据

SELECTemp_name,dept,title,addr

FROMemployee

WHEREsex='f'AND(addr='上海'ORaddr='北京');

(4)在表sales中挑出销售金额大于等于10000元订单//大于7000元订单

SELECT*

FROMsales

WHEREtot_amt>7000;

(5)选取订单金额最高的前10%的订单数据。

//已恢复原始删除数据

SELECT*

FROMsales

ORDERBYtot_amt

LIMIT0,((SELECTCOUNT(*)FROMsales)*0.2);

(6)查找出职称为经理或职称为职员的女员工的信息。

//成员

SELECT*

FROMemployee

WHEREsex='f'AND(title='经理'ORtitle='成员');

(7)计算出一共销售了几种产品。

SELECTCOUNT(DISTINCTprod_id)

FROMsales_item;

(8)显示sale_item表中每种个别产品的订购金额总和,并且依据销售金额由大到小排列来显示出每一种产品的排行榜。

SELECTprod_id,SUM(qty*unit_price)ASsale_money

FROMsales_item

GROUPBYprod_id

ORDERBYsale_money;

(9)计算每一产品每月的销售金额总和,并将结果按销售(月份,产品编号)排序。

SELECTprod_id,SUM(qty*unit_price)ASsale_money,order_date

FROMsales_item

GROUPBYprod_id

ORDERBYorder_dateDESC,prod_idDESC;

(10)由sales表中查找出销售金额最高的订单。

SELECTMAX(tot_amt)

FROMsales;

(11)由sales表中查找出订单金额大于“E0013业务员在1996/10/15这天所接任一张订单的金额”的所有订单,并显示承接这些订单的业务员和该条订单的金额。

//E0008,2018-05-24

SELECTsale_id,tot_amt

FROMsales

WHEREtot_amt>(

SELECTtot_amt

FROMsales

WHEREsale_id='E0008'ANDorder_date='2018-05-24');

(12)找出公司女业务员所接的订单。

SELECTemp_name,sex,sale_id,order_no,tot_amt

FROMsales,employee

WHEREsex='f'ANDsales.sale_id=employee.emp_no;

(13)找出公司中姓名相同的员工,并且依据员工编号排序相识这些员工信息。

INSERTemployeeVALUES('E0015','王立','f','销售部','成员','2015/8/14','1989/5/21',5000,'上海','2016/4/2');//已插入姓名相同的员工

SELECT*

FROMemployeea,employeeb

WHEREa.emp_name=b.emp_nameANDa.emp_no<>b.emp_no;

(14)找出目前业绩未超过20000元的员工。

//8000元

SELECTemp_no,emp_name

FROMemployee

WHEREemp_noIN(

SELECTsale_id

FROMsales

WHEREtot_amt<8000);

(15)计算公司内各个部门的工资支出总和。

SELECTdept,SUM(salary)

FROMemployee

GROUPBYdept;

(16)计算每一产品销售数量总和与平均销售单价。

SELECTprod_id,SUM(qty),avg(unit_price)

FROMsales_item

GROUPBYprod_id;

四、实验报告

实验三

实验名称:

T-SQL编程(2课时)

一、实验目的

1、掌握T-SQL编程方法。

2、掌握触发器、存储过程创建方法和原理

二、实验环境

MSSQLSERVER2000以上版本

三、实验内容与步骤

(1)T-SQL的流程控制语句使用

编写程序完成以下功能,在查询分析器中执行程序,并记录结果。

●在employee表中求某个部门年龄最大和最小的员工的信息,包括:

编号,姓名,年龄。

//每个部门

SELECTdept,emp_no,emp_name,MAX(2018-YEAR(birthday))最大年龄

FROMemployee

GROUPBYdept;

SELECTdept,emp_no,emp_name,MIN(2018-YEAR(birthday))最小年龄

FROMemployee

GROUPBYdept;

●在employee表中先插入三条新记录,其中的dept字段的值为NULL,要求对记录进行查询时,对应的NULL值在显示时显示为“未分配”

SELECTemp_no,emp_name,

(CASE

WHENdept=''THEN'未分配'

ELSEdept

END)AS分配情况

FROMemployee;

●查询employee表中年龄,并根据年龄输出所属阶段(青年、中年、老年)。

SELECTemp_n

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1