四川师范大学数据库实验原理实验报告Word文件下载.docx
- 文档编号:21391632
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:22
- 大小:815.40KB
四川师范大学数据库实验原理实验报告Word文件下载.docx
《四川师范大学数据库实验原理实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《四川师范大学数据库实验原理实验报告Word文件下载.docx(22页珍藏版)》请在冰豆网上搜索。
3.主要设备及软件
1PC
2MicrosoftSQLServer2005
实验二建立表格,并插入若干记录
1学会使用CreateTable和Insert语句
2.实验内容
1使用sql语言建立student,course和sc共三张表格(包括主键,外码的指定,分析具体情
况适当给出一些用户自定义的约束.
CREATETABLEStudent
(Snochar(9PRIMARYKEY,
Snamechar(20NOTNULL,
SsexCHAR(2,
SageSMALLINT,
Sdeptchar(20
;
CREATETABLECourse
(Cnochar(4PRIMARYKEY,
Cnamechar(14,
Cpnochar(4,
Ccreditsmallint,
FOREIGNKEY(CpnoREFERENCESCourse(Cno,
CREATETABLESC
(Snochar(9,
Cnochar(4,
Gradesmallint,
PRIMARYKEY(Sno,Cno,
FOREIGNKEY(SnoREFERENCESStudent(Sno,
FOREIGNKEY(CnoREFERENCESCourse(Cno,
2使用Insert语句向这三张表格里添加至少10条记录(数据如教材56页所示,如果出现错
误,分析错误原因
INSERTINTOStudentVALUES('
95001'
'
李勇'
男'
20,'
CS'
95002'
刘晨'
女'
IS'
95003'
王敏'
MA'
95004'
张立'
SELECT*FROMStudent;
INSERTINTOCourse(Cno,Cname,CcreditVALUES('
1'
数据库'
4;
2'
数学'
2;
3'
信息系统'
4'
操作系统'
3;
5'
数据结构'
6'
数据处理'
7'
PASCAL语言'
UPDATECourseSETCpno='
WHERECno='
UPDATECourseSETCpno='
SELECT*FROMCourse;
INSERTINTOSCVALUES('
92;
INSERTINTOSCVALUES('
85;
88;
90;
80;
SELECT*FROMSC;
3在“对象资源管理器”中实现(1题中的三张表
展开【数据库】节点,单击【表】节点,选择【新建表】,填入如下数据
保存的时候保存为Student就行了
保存的时候保存为Course
设置外键如图所示
4在“对象资源管理器”中向这(1题中的三张表添加至少10条记录(数据如教
材56页所示,如果出现错误,分析错误原因
第一张表中插入数据
第二张表中插入数据
第三张表插入数据
实验三修改表格结构,修改和删除表格中的数据
(验证型实验4学时
1用ALTER语句修改表结构:
添加列,修改列定义,删除列。
使用UPDATE和DELETE
语句修改和删除Student,sc,course表格中的数据。
如下所示,创建表s,并完成随后的操作
Createtables(snochar(2primarykey,snamechar(10;
1向表中添加属性列status,数据类型为int
ALTERTABLEsADDstatusint;
2向表中添加属性列city,数据类型为varchar(20,并限定其取值范围为“上
海”,“北京”,“天津”之一
ALTERtablesADDcityvarchar(20;
AltertablesaddconstraintCK_citycheck(city='
上海'
orcity='
北京'
天津'
3修改属性列status的数据类型为smallint
ALTERtablesALTERCOLUMNstatussmallint;
4删除(3题中取值范围的约束
ALTERtablesDROPCK_city;
5删除属性列status
如教材85页所示,建立student,sc,course等表,并插入若干数据,完成如下操作:
列出没有成绩的学生的学号和课程号
SELECTSno,CnoFROMscWHEREGradeISNULL;
列出2号课程成绩在70分到80分学生的学号
SELECTSnoFROMscWHEREGrade=2ANDGradebetween70AND80;
查询所有2005级的学生的姓名,性别和所在系
SELECTSname,Ssex,SdeptFROMstudentWHERESnoLIKE'
2005%'
查询计科系2004级全体学生的所有信息
SELECT*FROMstudentWHERESdept='
js'
ANDSnoLIKE'
2004%'
查询计科系2006级3班和4班学生的姓名和性别
SELECTSname,SsexFROMstudentWHERESdept='
AND(SnoLIKE'
2006_3%'
ORSnoLIKE'
2006_4%'
查询数学系所有学生的姓名,性别和出生年份|
SELECTSname,Ssex,2012-SageFROMstudentWHERESdept='
math'
将course表中名为PASCAL语言的课程更名为“C语言”
UPDATECourseSETCname='
C语言'
WHERECname='
PASCAL'
将所有课程的学分增加1分
UPDATECourseSETCcredit=Ccredit+1;
删除没有选课成绩的选课记录
DELETEFROMscWHEREGradeISNULL;
删除“IS”系的所有学生信息
DELETEFROMstudentWHERESdept='
删除所有的课程信息
DELETEFROMCourse;
实验四查询(多表查询,嵌套查询,分组查询
(验证型实验12学时
1实现单表和多表的普通查询和嵌套查询。
包括返回单值的子查询和返回多值的子查询。
使用5个聚合函数以及GROUPBY子句和HAVING子句实现分组查询.
有如下关系模式,分析每个关系模式的主码,外码,完成后面的查询
职员表:
Emp(eid:
integer;
ename:
string,salary:
real
部门表:
Dept(did:
integer,dname:
string,managerid:
integer,floornum:
integer
职员与部分的关系表:
Works(eid:
integer,did:
Works表表示:
一个职员可以在多个部门工作,一个部门有多个职员
Dept表中managerid可以取值null,表示尚未任命部门经理,floornum可以取值null,表示尚未分配工作地点
用单表查询完成如下操作:
1输出所有员工的姓名和工资
SELECTename,salaryFROMEmp;
2输出薪水少于10000或者大于100000的雇员的名字
SELECTenameFROMEmpWHEREsalary<
10000orsalary>
100000;
3输出所有姓“欧阳”,且全名为四个字的雇员的姓名和工资
SELECTename,salaryFROMEmpWHEREenameLIKE'
欧阳__'
4输出薪水在20000和50000之间的雇员的名字
SELECTenameFROMEmpWHEREsalaryBETWEEN20000AND50000;
5输出部门名字中含有“_”的所有部门的名字和楼层号
SELECTdname,floornumFROMDeptWHEREdnameLIKE'
%\_%'
ESCAPE'
\'
6查询公司的员工数
SELECTCOUNT(*FROMEmp;
7查询所有还没有部门经理的部门的名字和编号
SELECTdname,didFROMDeptWHEREmanageridisNULL;
8查询所有已分配楼层的部门的所有信息
SELECT*FROMDeptWHEREfloornumisNOTNULL;
用连接查询完成如下操作:
1查询“电视”部门的职工人数
SELECTCOUNT(didFROMWorksWHEREWorks.did=(SELECTdidFROMDeptWHEREdname='
电视'
2输出每个部门的名字和平均工资
selectdname,avg(salaryfromemp,dept,workswhereemp.eid=works.eidanddept.did=works.didgroupbydname;
3查询每个部门的部门编号,及其拥有的雇员的人数
selectDept.did,Count(eidfromDept,WorksWHEREDept.did=Works.didGROUPBYDept.did;
4查询在第10层工作,同时薪水少于¥50000的所有雇员的名字
SELECTDISTINCTenameFROMEmp,Dept,WorksWHEREEmp.eid=Works.eidANDWorks.did=Dept.didANDDept.floornum=10ANDsalary>
50000;
5输出同时管理三个或者更多部门的管理者的名字
selectenamefromdept,empwheredept.managerid=emp.eidgroupbymanagerid,enamehavingcount(did>
=3;
6输出管理在同一层上10个以上部门的所有管理者的名字
SELECTenameFROMDept,EmpWHEREEmp.eid=Dept.manageridgroupbymanagerid,floornum,enamehavingCOUNT(did>
10;
7输出雇员“刘丽”工作的部门的名字
SELECTdnameFROMEmp,Dept,WorksWHEREEmp.ename='
刘丽'
ANDEmp.eid=Works.eidANDWorks.did=Dept.did;
用嵌套查询完成如下操作:
1查询工资最高的雇员的名字
SELECTenameFROMEmpWHEREsalary=(SELECTMAX(salaryFROMEmp;
2查询工资最低的雇员的名字及其所在部门的编号和名字
SELECTename,Dept.did,dnameFROMEmp,Dept,WorksWHEREsalary=(SELECTMIN(salaryFROMEmpANDEmp.eid=Works.eidANDWorks.did=Dept.did;
3输出与Santa工作部门相同的所有雇员的所有信息
SELECTEmp.eid,ename,salaryFROMEmp,Dept,WorksWHEREEmp.eid=Works.eidANDWorks.did=Dept.didANDDept.didin(SELECTdidFROMWorksWHEREeid=(SELECTeidFROMEmpWHEREename='
Santa'
4找出薪水在20000以上,并且在电视部门或者玩具部门工作的雇员的名字
SELECTDISTINCTenameFROMEmp,Dept,WorksWHEREEmp.eid=Works.eidANDWorks.did=Dept.didANDsalary>
20000ANDdnamein(SELECTdnameFROMDeptWHEREdname='
ordname='
玩具'
5输出与刘丽在同一层工作的雇员的名字
SELECTDISTINCTenameFROMEmp,Dept,WorksWHEREEmp.eid=Works.eidANDWorks.did=Dept.didANDfloornumin(SELECTDISTINCTfloornumFROMDept,Emp,WorksWHEREDept.did=Works.didANDWorks.eid=Emp.eidANDEmp.ename='
6输出比所在部门的经理挣的还要多的雇员的名字
SELECTDISTINCTenameFROMEmp,Dept,WorksWHEREsalary>
All(SELECTsalaryFROMEmp,DeptWHEREEmp.eid=Dept.manageridANDEmp.eid=Works.eidANDWorks.did=
Dept.didANDenamein(SELECTenameFROMEmp;
7输出满足如下条件的各个部门的名字:
经理的姓为张,同时他的薪水既不是
本部门最高也不是最低
SELECTDISTINCTdnameFROMWorks,Dept,empwhereDept.managerid=emp.eidandenamelike'
张%'
ANDsalary<
(selectmax(salaryFROMempWHEREeidIN(SELECTeidFROMworks,DeptWHEREworks.did=Dept.didANDsalary>
(SELECTmin(salaryfromempwhereeidin(selecteidfromworkswhereworks.did=dept.did;
8输出比“玩具”部门所有职工工资都高的雇员的姓名
SELECTenameFROMEmpWHEREsalary>
(SELECTmax(salaryFROMEmp,Works,DeptWHEREEmp.eid=Works.eidANDWorks.did=Dept.didANDDept.dname='
9输出比“电视”部门职工平均工资高的雇员的姓名
(SELEcTAVG(salaryFROMEmp,Works,DeptWHEREEmp.eid=Works.eidANDWorks.did=Dept.didANDDept.dname='
GROUPBYDept.did;
10找出所有有职工的部门的名字和楼层号
SELECTdname,floornumFROMDeptWHEREdidin(SELECTDISTINCTdidFROMWorks;
11查询所有没有职工的部门编号和名字
SELECTdid,dnameFROMDeptWHEREdidnotin(SELECTDISTINCTdidFROMWorks;
12输出同时在玩具部门和糖果部门工作的雇员的名字和薪水
SELECTDISTINCTename,salaryFROMEmp,Works,DeptWHEREEmp.eid=Works.eidANDWorks.eidin(SELECTeidFROMWorks,DeptWHEREWorks.did=Dept.didANDDept.dname='
ANDWorks.eidin(SELECTeidFROMWorks,DeptWHEREWorks.did=Dept.didANDDept.dname='
糖果'
实验五为表格建立约束,修改约束和查询约束
1使用ALTER语句和CREATE语句建立、修改、删除和查询约束
执行以下SQL语句,完成随后的操作,若有错误,分析错误原因并改正错误:
createtablestudent(snochar(9notnull,snamechar(10,ssexchar(2,sagetinyint,sdeptvarchar(40;
createtablecourse(cnochar(4notnull,cnamevarchar(30,cpnochar(4,credittinyintcreatetablesc(snochar(9,char(5,gradenumeric(3,1;
出错
第三句改为
createtablesc(snochar(9,cnochar(5,gradenumeric(3,1
1在student表中,使sdept只能取值“计算机科学学院”,“数软学院”,“电子工程学
院”,“化学与材料科学学院”
AltertablestudentaddconstraintCK_sdeptcheck(sdept='
计算机科学学院'
orsdept='
数软学院'
电子工程学院'
化学
与材料科学学院'
2在student表中sage有默认值18
ALTERTABLEstudentADDDEFAULT('
18'
FORsage;
3为student表建立主键
ALTERTABLEstudentADDPRIMARYKEY(Sno;
4为course表建立主键和外键,其中外键约束名为C_FK_CPNO
ALTERTABLEcourseADDprimarykey(cno,C_FK_CPNOCHAR(4FOREIGNKEY(cpnoREFERENCEScourse(cno;
5为course表建立检查约束,限定credit的取值只能取3,2,4,5;
ALTERTABLEcourseADDCHECK(creditin('
6为course表建立唯一约束,确保每们课程名字唯一
ALTERTABLEcourseADDUNIQUE(cname;
7为sc表建立主键和外键,并给出相应的约束名
ALTERTABLEscADDconstraintPK_sno_cnoPRIMARYKEY(sno,cno,FK_snoCHAR(9FOREIGNKEY(snoREFERENCESstudent(sno,FK_cnoCHAR(4FOREIGNKEY(cno
REFERENCEScourse(cno;
8在course表中插入元组(1,数据库,5,4和(2,数学,null,2,若不能正确
插入,分析原因,给出解决办法
不能正确插入,因为数据类型不对,更改方案
INSERTINTOcourse(cno,cname,cpno,creditVALUES('
INSERTINTOCourse(cno,cname,cpno,creditVALU
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 四川 师范大学 数据库 实验 原理 报告