文档介绍:该【数据库系统原理实验报告 】是由【青山代下】上传分享,文档一共【18】页,该文档可以免费在线阅读,需要了解更多关于【数据库系统原理实验报告 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:..《数据库系统原理》实验报告班级________姓名________________学号___________信息与电子工程学院:..实验1sqlserver熟悉和数据库创建一、实验目的熟悉sqlserver2005提供的服务管理器、企业管理器、查询分析器、客户端和服务器端网络实用工具等常用管理工具的使用。理解客户/服务器模式,理解面向连接与非面向连接的差别。理解交互式sql的工作机制。能够理解命名管道协议与tcp/ip协议的差别。能够登陆上sqlserver数据库服务器。二、实验内容1、启动sqlserver服务。2、打开sqlserver的企业管理器,连接上sqlserver服务器。展开左边树状窗口的各级结点,观察右边内容窗口的变化。3、打开sqlserver的查询分析器,用use命令打开样例数据库pubs。4、在查询窗口输入execsp_help,运行后察看结果。5、在查询窗口输入select*fromauthors,运行后察看结果。三、实验结果3、当不确定当前所操作的是哪个数据库,可使用use来定位到某数据库。4、5、查询某张表的所有列。:..实验2简单查询一、实验目的:熟悉sqlserver的企业管理器和查询分析器的用户界面,掌握用企业管理器和查询分析器创建数据库,修改数据库和删除数据库的方法。二、实验内容分别使用sqlserver2005企业管理器和t—sql语句,按下列要求创建、修改和删除用户数据库。1、pany的数据库,数据库中包含一个数据文件,逻辑文件名为company_data,磁盘文件名为,文件初始容量为5mb,最大容量为15mb,文件容量递增值为1mb;pany_log,磁盘文件名为,文件初始容量为5mb,最大容量为10mb,文件容量递增值为1mb。2、对该数据库进行修改:添加一个数据文件,pany2_data,磁盘文件名为,文件初始容量为1mb,最大容量为5mb,文件容量递增值为1mb;将日志文件company_log的最大容量增加为15mb,文件容量递增值为2mb。3、在company数据库中添加一个文件组tempgroup,并向该文件组中添加一个容量为3mb,最大容量为10mb,递增量为1mb的数据文件,该数据文件的逻辑文件名为company3_data,磁盘文件名为。4、pany2_data。5、pany。6、pany。三、实验结果1、panyon(pany_data,size=5mb,maxsize=15mb,:..filegrowth=1mb)logon(pany_log,size=5mb,maxsize=10mb,filegrowth=1mb);2、panyaddfile(pany2_data,size=1mb,maxsize=5mb,filegrowth=1mb)panymodifyfile(name='company_log',maxsize=15mb,filegrowth=2mb);3、panyaddfilegrouptempgrouppanyaddfile(name='company3_data',size=3mb,maxsize=10mb,filegrowth=1mb)tofilegrouptempgroup;:..4、pany2_data;5、pany;6、pany;:..实验3创建和修改数据表一、实验目的:熟悉有关数据表的创建和修改等工作,理解数据库模式的概念,了解主键约束、外键约束、unique约束和check约束的创建和应用。要求学生熟练掌握使用企业管理器和t—sql语句createtable、altertable及droptable语句对数据表进行管理。二、实验内容分别在sqlserver2005企业管理器和在查询分析分析器中使用t—sql语句完成以下操作:员工人事表employeeemp_nochar(5)notnullprimarykey员工编号emp_namevarchar(10)notnull员工姓名sexchar(2)notnull性别deptvarchar(10)notnull所属部门titlevarchar(10)notnull职称date_hireddatetimenotnull雇佣日birthdaydatetimenull生日salaryintnotnull薪水telephonevarchar(20)null电话addrvarchar(50)null住址客户表customercust_idchar(5)notnullprimarykey客户号cust_namevarchar(20)notnull客户名称addrvarchar(40)notnull客户住址tel_novarchar(20)notnull客户电话zipchar(6)null邮政编码销售主表sales:..order_nointnotnullprimarykey订单编号cust_idchar(5)notnull客户号sale_idchar(5)notnull业务员编号tot_amtnumeric(9,2)notnull订单金额order_datedatetimenotnull订货日期销货明细表sale_itemorder_nointnotnullprimarykey订单编号prod_idchar(5)notnullprimarykey产品编号qtyintnotnull销售数量unit_pricenumeric(7,2)notnull单价order_datedatetimenull订单日期产品名称表productprod_idchar(5)notnullprimarykey产品编号prod_namevarchar(20)notnull产品名称1、pany中创建以上五张表,并设置各表的主键。2、在销售主表sales中添加字段“发票号码”invoice_no,char(10),notnull。3、添加外键约束:,参照字段为员工表employee中的字段员工编号emp_no,约束名为fk_sale_id。,参照字段为客户表customer中的字段客户号cust_id,约束名为fk_cust_id。,参照字段为销售主表sales中的字段订单编号order_no,约束名为fk_order_no。,参照字段为产品名称表product中的产品编号字段prod_id,约束名为fk_prod_id。:..4、添加核查约束:,约束名为ck_salary。“e”字母开头,后面跟5位数的编号,约束名为ck_emp_no。“男”和“女”。约束名为ck_sex。“i”字母开头,后面跟9位数的编号,约束名为ck_inno。5、为销售主表sales中的字段发票号码invoice_no设置为唯一约束,约束名为un_inno。三、实验结果1、createtableemployee(emp_nochar(5)notnullprimarykey,emp_namevarchar(10)notnull,sexchar(2)notnull,deptvarchar(10)notnull,titlevarchar(10)notnull,date_hireddatetimenotnull,birthdaydatetimenull,salaryintnotnull,telephonevarchar(20)null,addrvarchar(50)null);createtablecustomer(cust_idchar(5)notnullprimarykey,cust_namevarchar(20)notnull,addrvarchar(40)notnull,:..tel_novarchar(20)notnull,zipchar(6)null);createtablesales(order_nointnotnullprimarykey,cust_idchar(5)notnull,sale_idchar(5)notnull,tot_amtnumeric(9,2)notnull,order_datedatetimenotnull);createtablesale_item(order_nointnotnull,prod_idchar(5)notnull,qtyintnotnull,unit_pricenumeric(7,2)notnull,order_datedatetimenull,primarykey(order_no,prod_id));createtableproduct(prod_idchar(5)notnullprimarykey,prod_namevarchar(20)notnull);2、altertablesalesaddinvoice_nochar(10)notnull;3、a、altertablesalesaddconstraintfk_sale_idforeignkey(sale_id)referencesemployee(emp_no);:..、altertablesalesaddconstraintfk_cust_idforeignkey(cust_id)referencescustomer(cust_id);c、altertablesale_itemaddconstraintfk_order_noforeignkey(order_no)referencessales(order_no);d、altertablesale_itemaddconstraintfk_prod_idforeignkey(prod_id)referencesproduct(prod_id);4、a、altertableemployeeaddconstraintck_salarycheck(salarybetween1000and10000);b、altertableemployeeaddconstraintck_emp_nocheck(emp_nolike'e[0-9][0-9][0-9][0-9][0-9]');c、altertableemployeeaddconstraintck_sexcheck(sexlike('男''女'));d、altertablesalesaddconstraintck_innocheck(invoice_nolike'i[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]');5、altertablesalesaddconstraintun_innounique(invoice_no);实验4简单的单表查询一、实验目的:熟练掌握用select语句实现简单的单表查询。掌握select子句、from子句、where子句及orderby子句的用法。:..运行查询文件,生成上机必要的数据,然后完成以下操作。1、查找所有经理的姓名、职称、薪水。2、在销售主表sales中查找销售金额大于等于10000元的订单。3、在员工表employee中查找薪水在4000至8000元之间的员工。4、在员工表employee中查找住址为上海、北京、天津这三个城市的员工。5、在客户表customer中查找住址不在上海、北京、天津这三个城市的客户。6、在员工表employee中查找姓“王”用姓名最后一个字为“功”的员工。7、在客户表customer中查找姓“刘”的客户名称、电话。8、查找出职称为“经理”或“职员”的女工的信息。9、查找薪水最高的前三条员工记录。10、查找订单金额最高的前10%的订单记录。11、查找员工表中所属部门(去掉重复记录)。12、查找员工表中的所有记录,并按薪水由低到高进行排序。三、实验结果1、selectemp_name,title,salaryfromemployeewheretitle='经理';2、select*fromsaleswheretot_amt>10000;3、select*fromemployeewheresalarybetween4000and8000;4、select*fromemployeewhereaddrin('上海','北京','天津');5、select*fromcustomerwhereaddrnotin('上海','北京','天津');6、select*fromemployeewhereemp_namelike'王%五';7、selectcust_name,tel_nofromcustomerwherecust_namelike'刘%';8、select*fromemployeewheretitlein('经理','职员')andsex='女';9、selecttop3*fromemployeeorderbysalarydesc;10、selecttop10percent*fromsalesorderbytot_amtdesc;11、selectdistinctdeptfromemployee;:..、select*fromemployeeorderbysalary;实验5复杂的单表查询一、实验目的熟练掌握select查询语句中的groupby子句、having子句的用法,以及汇总函数的使用。二、实验内容1、在员工表employee中统计员工人数。2、统计各部门员工的员工人数及平均薪水。3、查询销售业绩超过10000元的员工编号。4、计算每一产品销售数量总和与平均销售单价。5、统计各部门不同性别、或各部门、或不同性别或所有员工的平均薪水(在groupby子句中使用cube关键字)。6、统计各部门不同性别、或各部门或所有员工的平均薪水(在groupby子句中使用rollup关键字)。7、计算出一共销售了几种产品。8、显示sale_item表中每种产品的订购金额总和,并且依据销售金额由大到小排列来显示出每一种产品的排行榜。9、计算每一产品每月的销售金额总和,并将结果按销售(月份,产品编号)排序。10、查询每位业务员各个月的业绩,并按业务员编号、月份降序排序。三、实验结果1、selectcount(emp_no)总人数fromemployee;2、selectdept,count(emp_no)员工人数,avg(salary)平均薪水fromemployeegroupbydept;:..、selectsale_id,tot_amtfromwheretot_amt>10000;4、selectprod_id,count(prod_id)销售总量,avg(unit_price)平均单价fromgroupbyprod_id;5、selectsex,title,avg(salary)平均薪水fromgroupbysex,titlewithcube;6、selectcasewhen(grouping(sex)=1)then'all'elseisnull(sex,'unknown')endassex,casewhen(grouping(title)=1)then'all'elseisnull(title,'unknown')endastitle,avg(salary)as平均薪水fromemployeegroupbysex,titlewithrollup;7、selectdistinctcount(prod_id)种类数fromsale_item;8、selectprod_id,sum(qty*unit_price)总额fromsale_itemgroupbyprod_idorderbysum(unit_price)desc;9、selectprod_id,month(order_date),sum(unit_price)fromsale_itemgroupbyprod_id,month(order_date)orderbyprod_id,month(order_date)desc;10、selectsale_id,month(order_date),sum(tot_amt)fromsalesgroupbysale_id,month(order_date)orderbysale_id,month(order_date)desc;:..6连接查询一、实验目的掌握使用连接的方法从多个表中查询数据。理解内连接、外连接(包括左外连接、右外连接和全外连接)、自身连接的概念和使用。要求学生熟练掌握在from子句和在where子句中指定连接条件的这两种方法。二、实验内容1、查找出employee表中部门相同且住址相同的女员工的姓名、性别、职称、薪水、住址。2、检索product表和sale_item表中相同产品的产品编号、产品名称、数量、单价。3、检索product表和sale_item表中单价高于2400元的相同产品的产品编号、产品名称、数量、单价。4、查询在每张订单中订购金额超过24000元的客户名及其地址。5、查找有销售记录的客户编号、名称和订单总额。6、每位客户订购的每种产品的总数量及平均单价,并按客户号,产品号从小到大排列。7、查找在1997年中有销售记录的客户编号、名称和订单总额。8、分别使用左向外连接、右向外连接、完整外部连接检索product表和sale_item表中单价高于2400元的相同产品的产品编号、产品名称、数量、单价。并分析比较检索的结果。三、实验结果1、select,,,,fromemployeea,employeebwhere=and=and='女';2、select,prod_name,qty,unit_pricefromsale_item,productwhere=;3、select,prod_name,qty,unit_pricefromsale_item,productwhereunit_price>2400;:..、selectcust_name,addrfromcustomerwherecust_idin(selectcust_idfromsaleswheretot_amt>24000);5、select,cust_name,tot_amtfromcustomera,salesbwhere=;6、selectprod_id,cust_id,qty,unit_pricefromsale_item,salesorderbyprod_id,cust_id;7、select,cust_name,tot_amtfromcustomera,salesbwhere=andconvert(char(4),order_date,120)='1997';8、①左外连接select,,,fromproductaleftouterjoinsale_itembon=and>2400;②右外连接select,,,fromproductarightouterjoinsale_itembon=and>2400;③完整外部连接select,,,fromproductafulljoinsale_itembon=and>2400;实验7嵌套查询三、实验目的掌握select语句的嵌套使用,实现多表的复杂查询,进一步理解select语句的高级使用方法。四、实验内容1、由sales表中查找出销售金额最高的订单。2、由sales表中查找出订单金额大于“e0013业务员在1996/10/15这天所接任一张订单的金额”的所有订单,并显示承接这些订单的业务员和该条订单的金额。:..3、找出公司女业务员所接的订单。4、找出目前业绩未超过200000元的员工。5、在销售主表sales中查询销售业绩最高的业务员编号及销售业绩。6、找出目前业绩超过232000元的员工编号和姓名。7、查询订购的产品至少包含了订单10003中所订购产品的订单。8、查询末承接业务的员工的信息。三、实验结果1、selectorder_no,tot_amtfromsaleswheretot_amt=(selectmax(tot_amt)fromsales);2、selectorder_no,tot_amt,sale_idfromsaleswheretot_amt>all(selecttot_amtfromsaleswheresale_id='e0013'andorder_date='1996/10/15')orderbytot_amt;3、selectemp_nofromemployeewheresex='女';4、selectemp_no,emp_namefromemployeewheresalary<'200000';5、selecttop1sale_id,tot_amtfromsales;6、selectemp_no,emp_namefromemployeewhereemo_noin(selectsale_idfromsalesgroupbysale_idhavingsun(tot_amt)>23200);7、selectdistinctorder_nofromsale_itemawhereorder_no<>'10003'andnotexists(:..select*fromsale_itembwhereorder_no='10003'andnotexists(select*fromsale_itemcwhere=and=);8、select*fromemployeeawherenotexists(select*fromsalesbwhere=实验8数据更新五、实验目的熟练使用insert/delete/update语句进行表的更新操作。六、实验内容1、为各表添加若干条记录,必须符合实验二中设定的各种约束。2、将每个员工的薪水上调10%。3、删除sales表中作废的订单(其发票号码为‘i000000004’),其订货明细表中的数据也一并删除。4、删除所有没有销售业绩的员工记录。5、对那些只要有一笔销售业绩超过20000元的员工的薪水增加500元。三、实验结果1、2、3、4、5、:..