1、姓名 黄鸿波 学号3100717208班别 计本10-2数据库原理及应用(本科)-计算机信息教研室桂林理工大学信息科学与工程学院二。一二年五月实验1创建数据库与数据表 2实验2简单查询和连接查询 10实验3嵌套查询和集合查询 12实验4数据完整性 1419时间:机房号:得分:实验1创建数据库与数据表实验目的:1 .熟悉SQL SERVER环境;2 .掌握数据库和数据表的创建和删除,实践 SQL的CREATE、ALTER和DROP命 令;3 .掌握数据表的创建和数据记录的插入方法。 实验内容:1.创建教学管理“JXGL”数据库,并建立学生 STUDENT、课程COURSE和选修SC 三个数据表,
2、各表中的数据如下所示:学生 STUDENT :SnoSnameSsexSageSdept95001李勇M20CS95002刘晨F19IS95003王敏F18MA95004张立M18IS课程 COURSE:CnoCnameCpnoCcredit1数据库542数学23信息系统144操作系统635数据结构746数据处理27C语百64选彳窗SC:SnoCnoGrade95001192950012859500138895002290950023802.创建供应系统“ GYXT ”数据库,其中包括供应商表S、零件表 P、工程项目表 J和供应情况表SPJ四个数据表,各表中数据如下所示。供应商S:SNOSNA
3、MECITYS1精益天津S2万胜北京S3东方北京S4丰泰隆上海S5康健南京零件P:PNOPNAMECOLORWEIGHTP1螺母红12P2螺栓绿17P3螺丝刀蓝14P4螺丝刀红14P5凸轮蓝40P6齿轮红30工程项目J:JNOJNAMECITYJ1三建北京J2一汽k春J3弹簧厂天津J4造船厂天津J5机车厂唐山J6无线电厂常州J7半导体厂南京供应情况SPJ:SNOPNOJNOQTYS1P1J1200S1P1J3100S1P1J4700S1P2J2100S2P3J1400S2P3J2200S2P3J4500S2P3J5400S2P5J1400S2P5J2100S3P1J1200S3P3J1200S
4、4P5J1100S4P6J3300S4P6J4200S5P2J4100S5P3J1200S5P6J2200S5P6J4500实验步骤:1.创建教学管理“ JXGL”数据库。(注:可采用可视窗体和 SQL命令两种方法创建。 以下是SQL命令方法)(1)创建教学管理“ JXGL”数据库。在命令窗格中输入如下命令,然后单击“运行”钮执行该命令。CREATE DATABASE JXGL;(2)清空命令窗格后,在 JXGL数据库中建立STUDENT表,并插入记录,然后执行。CREATE TABLE STUDENT(Sno char(5) not null unique,Sname char(20) no
5、t null unique,Ssex char,Sage int,Sdept char(20);INSERT INTO STUDENT V ALUES(INSERT INTO STUDENT V ALUES(95001 ,李勇,M ,20,CS);95002,刘晨,F,19,IS);INSERT INTO STUDENT V ALUES(95003,王敏,F,18,MA);INSERT INTO STUDENT V ALUES(95004,张立,M,18,IS);(3)清空查询窗格后,JXGL数据库中建立COURSE表,并插入记录,然后执行。CREATE TABLE COURSE(Cno ch
6、ar(2) not null PRIMARY KEY(Cno),Cname char(20),Cpno char(2),Ccredit smallint);INSERT INTO COURSE VINSERT INTO COURSE VINSERT INTO COURSE VINSERT INTO COURSE VINSERT INTO COURSE VINSERT INTO COURSE VINSERT INTO COURSE VALUES( 1,数据库,5,4);ALUES( 2,数学,2);ALUES( 3,信息系统,1,4);ALUES( 4,操作系统,6,3);ALUES( 5,数据
7、结构,7,4);ALUES( 6,数据处理,2);ALUES( 7,C 语言,6,4);(4)清空查询窗格后,JXGL数据库中建立SC表,并插入记录,然后执行。CREATE TABLE SC(Sno char(5) not null, Cno char(2) not null, Grade smallint, PRIMARY KEY(Sno,Cno), FOREIGN KEY(Sno) REFERENCES STUDENT(Sno), FOREIGN KEY(Cno) REFERENCES COURSE(Cno);INSERT INTO SC V ALUES( 95001 , 1,92);IN
8、SERT INTO SC V ALUES( 95001 ; 2,85);INSERT INTO SC V ALUES( 95001 ; 3,88);INSERT INTO SC V ALUES( 95002 , 2,90);INSERT INTO SC V ALUES( 95002 , 3,80);(5)查看三个表中的内容。分别执行以下命令,查看STUDENT、COURSE和SC数据表中的内容。SELECT * FROM STUDENT;SELECT * FROM COURSE;SELECT * FROM SC;(6) ALTER TABLE、DROP TABLE、DROP DATABASE
9、命令运用。向STUDENT表增加“入学时间”歹U,其数据类型为日期型,用 SELECT命令查看 表中内容。ALTER TABLE STUDENT ADD SCOME DATETIME;SELECT * FROM STUDENT;删除“入学时间”歹U,再用SELECT命令查看表中内容。ALTER TABLE STUDENT DROP COLUMN SCOME ;SELECT * FROM STUDENT;删除数据表。DROP TABLE SC;DROP TABLE STUDENT;DROP TABLE COURSE;删除数据库命令。切换到其他任意数据库,然后可用如下命令删除 JXGL数据库。DR
10、OP DATABASE JXGL;重复(1) (4)过程,建立数据库备以后的查询使用。2.创建供应系统“GYXT”数据库。(注:可采用可视窗体和 SQL命令两种方法创建。) 下面写出实现如下操作的SQL语句:(1)创建供应系统“ GYXT ”数据库。CREATE DATABASE GYXT;(2) 建立供应商表S。CREATE TABLE S(SNO CHAR(5) PRIMARY KEY, SNAME CHAR(6) NOT NULL, CITY CHAR(10) NOT NULL );(3) 建立零件表P。CREATE TABLE P ( PNO CHAR( 2) PRIMARY KEY,
11、 PNAME CHAR( 6) NOT NULL, COLOR CHAR( 2) DEFAULT ( 红 ), WEIGHT INT ,);(4) 建立工程项目表J。CREATE TABLE J( JNO CHAR( 5) PRIMARY KEY, JNAME CHAR( 10 ) NOT NULL, CITY CHAR( 10) NOT NULL ););*/CREATE TABLE SPJ (5) 建立供应情况表SPJ。CREATE TABLE SPJ ( SNO char ( 5) not null, PNO char ( 2) not null, JNO char ( 5) not n
12、ull, QTY int ,PRIMARY KEY( SNO, PNO, JNO),FOREIGN KEY( SNO) REFERENCES S ( SNO), FOREIGN KEY( PNO) REFERENCES P ( PNO), FOREIGN KEY( JNO) REFERENCES J ( JNO), );(6)应用INSERT INTO命令将相应数据写入到供应商表S、零件表P、工程项目表J和供应情况表SPJ 四个数据表。INSERT INTO S VALUES(S1,精益 , 天津 );INSERT INTO S VALUES(S2,万胜 , 北京 );INSERT INTO
13、S VALUES(S3,北京 );INSERT INTO S VALUES(S4,丰泰隆, 上海 );INSERT INTO S VALUES(S5,南京 ,);*/INSERT INTO P VALUES ( P1 , , 红 , 12 );INSERT INTO P VALUES ( P2 , , 绿 , 17 );INSERT INTO P VALUES ( P3 , 蓝 ,蓝, 14 );INSERT INTO P VALUES ( P4 , , 红, 14 );INSERT INTO P VALUES ( P5 , , 蓝 , 40 );INSERT INTO P VALUES (
14、P6, 齿轮 , 红 , 30INSERT INTO J VALUES ( J1, , 北京 );INSERT INTO J VALUES ( J2, ,上齐长春);INSERT INTO J VALUES ( J3, , 天津 );INSERT INTO J VALUES ( J4, 造船厂, 天津 );INSERT INTO J VALUES ( J5, 机车厂, 唐山 );INSERT INTO J VALUES ( J6, 无线电厂 , 常州 );INSERT INTO J VALUES ( J7, 半导体厂 , 南京 INSERT INTO SPJ VALUES ( S1, P1,
15、J1, 200 );INSERT INTO SPJ VALUES ( S1, P1, J3, 100 );INSERT INTO SPJ VALUES ( S1, P1, J4, 700 );INSERT INTO SPJ VALUES ( S1, P2, J2, 100 );INSERT INTO SPJ VALUES ( S2, P3, J1, 400 );INSERT INTO SPJ VALUES ( S2, P3, J2, 200 );INSERT INTO SPJ VALUES ( S2, P3, J4, 500 );INSERT INTO SPJ VALUES ( S2, P3,
16、 J5, 400 );INSERT INTO SPJ VALUES ( S2, P5, J1, 400 );INSERT INTO SPJ VALUES ( S2, P5, J2, 100 );INSERT INTO SPJ VALUES ( S3, P1, J1, 200 );INSERT INTO SPJ VALUES ( S3, P3, J1, 200 );INSERT INTO SPJ VALUES ( S4, P5, J1, 100 );INSERT INTO SPJ VALUES ( S4, P6, J3, 300 );INSERT INTO SPJ VALUES ( S4, P6
17、, J4, 200 );INSERT INTO SPJ VALUES ( S5, P2, J4, 100 );INSERT INTO SPJ VALUES ( S5, P3, J1, 200 );INSERT INTO SPJ VALUES ( S5, P6, J2, 200 );INSERT INTO SPJ VALUES ( S5, P6, J4, 500 ););时间:机房号:得分:实验2简单查询和连接查询实验目的:1 .熟练掌握SQL Server查询分析器的使用方法,加深对标准SQL查询语句的理解。2 .熟练掌握简单表的数据查询、数据排序和数据连接查询的操作方法。 实验内容:1 .基
18、于实验一创建的教学管理JXGL数据库,实现数据的基本查询操作。2 .基于实验一创建的供应系统GYXT数据库,实现数据的基本查询操作。实验步骤:写出下列操作的SQL语句。1 .在教学管理JXGL数据库中进行如下操作:(1)求数学系学生的学号和姓名。USE JXGLSELECT Sno , SnameFROM STUDENTWHERE Sdept =MA ;(2)求选修了课程的学生学号。 USE JXGLSELECT distinct Sno FROM sc ;(3)求选修了数学课的学生学号和成绩,并要求对查询结果按成绩降序排列,如果成 绩相同则按学号升序排列。SELECT Sno , Grade
19、FROMSCWHERECno =2ORDER BY Grade DESC, Sno ASC;(4)求选修数学课其且成绩在80-90之间的学生学号和成绩,并将成绩乘以系数0.8输出。SELECT Sno , Grade =0.8 * GradeFROM SCWHERECno =2 AND Grade BETWEEN 80 AND 90ORDER BY Grade DESC, Sno ASC;(5) 求数学系或计算机系姓刘的学生的信息。SELECT *FROM STUDENTWHERESname LIKE 刘AND (Sdept =MA OR Sdept =IS)(6) 求缺少了成绩的学生的学号和
20、课程号。SELECT Sno , CnoFROM SCWHEREGrade IS NULL;(7) 查询每个学生的情况以及他(她)所选修的课程。SELECT STUDENT . Sno , Sname Ssex , Sage , Sdept , SC. Cno, Grade , Cname FROM STUDENT , SC , COURSEWHERE STUDENT . Sno = SC . Sno AND COURSE . Cno =SC. Cno(8) 求学生的学号、姓名、选修的课程名及成绩。SELECT STUDENT . Sno , Sname , Grade , CnameFROM
21、 STUDENT , SC , COURSEWHERE STUDENT . Sno = SC . Sno AND COURSE . Cno =SC. Cno(9) 求选修数学课且成绩为 90 分以上的学生学号、姓名、及成绩。SELECT STUDENT . Sno , Sname , Grade , CnameFROM STUDENT , SC , COURSEWHERE STUDENT . Sno = SC . Sno AND COURSE. Cno=SC. Cno AND SC . Grade =90 AND COURSE . Cname = 数学 ;(10)查询每一门课的间接先行课(即先
22、行课的先行课)。SELECT t1 . Cno , t1 . Cname , t3 . Cno , t3 . Cnamefrom COURSE t1 , COURSE t2 , COURSE t3WHERE t1 . Cpno =t2 . Cno and t2 . Cpno =t3 . Cno2 在供应系统GYXT 数据库中进行如下操作:(1) 求供应工程J1 零件的供应商号 SNO 。USE GYXTSELECT DISTINCT SNOFROM SPJWHEREJNO =J1;(2)求供应工程J1零件P1的供应商号 SNOo USE GYXTSELECT DISTINCT SNOFROM
23、SPJWHERE JNO =J1 AND PNO=P1;(3)统计每种零件的供应总量。USE GYXTSELECT SPJ . PNO, PNAME, COUNT(*)FROM SPJ , P WHERESPJ . PNO=P. PNO GROUP BY SPJ . PNO, PNAME;时间:机房号:得分:实验3嵌套查询和集合查询实验目的:1 .熟练掌握SQL Server查询分析器的使用方法,加深对标准SQL查询语句的理解。2 .熟练掌握数据查询中的嵌套、分组、统计、计算和组合的操作方法。实验内容:1 .基于实验一创建的教学管理JXGL数据库,实现数据的高级查询操作。2 .基于实验一创建的
24、供应系统GYXT数据库,实现数据的基本查询操作。实验步骤:写出下列操作的SQL语句。1.在教学管理JXGL数据库中进行如下操作: (1)求选修了数学的学生的学号和姓名。SELECT STUDENT . Sno,Sname FROM STUDENT , SCWHERE STUDENT . Sno=SC. Sno AND Cno =2;(2)求数学课程成绩高于李勇的学生学号和成绩。SELECT Sname , STUDENT. Sno from SC , STUDENT WHERE Grade (SELECT Grade from SC WHERESno =95001 and Cno =2)and
25、 Cno =2 and STUDENT . Sno =SC. Sno ; (3)求其他系中年龄小于计算机系年龄最大者的学生。SELECT Sname , STUDENT. Sno from STUDENTWHERE Sage ( SELECT MAX( Sage ) from STUDENT WHERESdept =IS )and not Sdept in (IS); (4)求其他系中比计算机系学生年龄都小的学生。SELECT Sname , STUDENT. Sno from STUDENT WHERE Sage = 2 and min ( grade ) 60 ;(11)求95级学生中选修
26、课程在 2门以上且都及格的学生号及总平均分,并按平均成绩排序。SELECT Sno , avg ( Grade ) as avg_gradeFROM SCgroup by Sno HAVING COUNT( Sno )= 2 and min ( grade ) 60 ORDER BY avg ( Grade ) DESC;(12) 统计每个人及格的成绩的平均值,及格的门数,结果按平均成绩降序,及格门数降序排列。SELECT Sno , avg ( Grade ) as avg_grade FROM SCgroup by Sno HAVING COUNT( Sno )= 2 and min (
27、Grade )= 60ORDER BY avg ( Grade ) DESC;13)统计所有课程均及格学生的平均成绩, 及格的门数, 结果按平均成绩降序, 及格门数降序排列。SELECT Sno , COUNT(*) AS Cno_Num , AVG( Grade ) AS AveScoreFROM SCGROUP BY Sno HAVING min ( Grade )= 60ORDERBY AveScoreDESC,Cno_NumDESC2 在供应系统GYXT 数据库中进行如下操作:(1) 求供应工程J1 红色零件的供应商号 SNO 。SELECT SNOFROM SPJWHEREPNO i
28、n( SELECT PNOFROM PWHERECOLOR = 红 )AND JNO =J1(2) 求零件供应总量在 1000 种以上的供应商名字。SELECT SNAMEFROM SWHERESNO IN( SELECT SNO FROM SPJ GROUP BY SNO HAVING SUM( QTY)= 1000 )时间:机房号:得分:实验4数据完整性实验目的:1 . 了解SQL Server用约束来维护数据完整性的机制。2 .掌握在企业管理器和查询分析器中如何创建、使用及删除约束的方法。 实验内容:1 .基于实验一创建的教学管理JXGL数据库,实现约束的创建、查看和删除操作。2 .创建
29、人事关系RSGX数据库及其中的职工数据表和部门数据表,并实现完整性约束条件的定义。 实验步骤:约束是SQL Server提供的自动强制数据完整性的一种方法,它是通过定义列的取值 规则来维护数据的完整性。常用的约束是NOT NULL (非空)、CHECK (检查)、UNIQUE(惟一)、PRIMARY KEY (主键)、FOREIGN KEY (外键)和 DEFALT (默认)约束。1.在教学管理JXGL数据库中进行如下操作:(1)建立一个 CITY 表(CityNo,CityName ),将 CityNo 指定为主键。企业管理器方法:在JXGL数据库中创建CITY表,其方法见实验1。打开企业管
30、理器,展开 JXGL数据库下的“表”文件夹,在右边的详细窗格中选择 要创建约束的表 CITY ,右击该表,选择“设计表”命令,启动表设计器。在表设计器中, 右击需要设为主键的字段 CityNo ,选择“设置主键”命令其左侧将出现一个钥匙样图标。 设置完毕,关闭表设计器。查询分析器方法:用SQL语句创建主键,可使用 CREATE TABLE命令完成:CREATE TABLE CITY(CityNo CHAR(2) CONSTRAINT c1 PRIMARY KEY, CityName VARCHAR(30) NOT NULL);若创建表时没有设置主键,也可以使用ALTER TABLE命令为已存在
31、的表创建主键约束:ALTER TABLE CITY ADD CONSTRAINT c1 PRIMARY KEY(CityNo) ;其中c1为主键约束名称。(2)为JXGL数据库中的CITY表,为其“ CityName”创建惟一约束。企业管理器方法:在企业管理器中,选择设置惟一约束的CITY表,打开表设计器。在表设计器中,右击 CityName字段,选择“索引/键”命令,出现“属性”对话框, 并进入“索引/键”选项卡。在该选项卡中,单击“新建”按钮,然后在“索引名”文本框中输入惟一约束名称,再从列名选项的下拉列表框中选择字段名称(如“CityName”),最后选择“创建UNIQUE ”复选框和“
32、约束”单选框,如图 5.1所示。单击“关闭”按钮,完成惟一约束的创建。图5.1创建惟一约束对话框图5.2设置检查约束查询分析器方法:为已存在的表创建惟一约束,SQL语句如下:ALTER TABLE CITY ADD CONSTRAINT c2 UNIQUE(CityName) ;(3)为JXGL数据库中的SC表,为其“ GRADE”创建检查约束。企业管理器方法:在企业管理器中,选择设置检查约束的SC表,打开表设计器。在表设计器中,右击 GRADE字段,选择“ CHECK约束”命令,出现“属性”对 话框,并进入“ CHECK约束”选项卡。在该选项卡中,单击“新建”按钮,然后在“约束名”文本框中输
33、入惟一约束名称,再在“约束表达式”文本框中输入约束条件“ GRADE=0 AND GRADE=0 AND GRADE=100);(4)为JXGL数据库中的STUDENT表,为其“ Ssex”创建默认约束M企业管理器方法:在企业管理器中,选择设置默认约束的STUDENT1,打开表设计器。在表设计器中,选择 Ssex字段,在默认值栏中输入“ M即可,如图5.3所示。单击“关闭”按钮,完成默认约束的创建。查询分析器方法:为已存在的表创建默认约束,SQL语句如下:ALTER TABLE STUDENT ADD CONSTRAINT c4 DEFAULTM FOR Ssex;一!J工二,.J:.J ,二
34、 L,. x Jj-:,;,9_iA2- , j * J2,1 L JT “d图5.3创建默认约束图5.4创建外键约束(5)为JXGL数据库中的SC表,为其“ Sno”创建外键约束。企业管理器方法:在企业管理器中,选择设置外键约束的SC表,打开表设计器。鼠标右击,选择“关系”命令,打开属性”对话框的 关系”选项卡。在该选项卡中,单击 新建”按钮,从主键表下拉列表中选择外键引用表 STUDENT, 并在其下拉列表框中选择外键引用的 SNO歹U;在外键表下拉表框中选择要创建外键的 SC 表,并从其下拉表框中选择要创建外键约束的 SNO歹U,如图5.4所示。单击“关闭”按钮, 完成外键约束的创建。查
35、询分析器方法:为已存在的表创建外键约束,SQL语句如下:ALTER TABLE SC ADD CONSTRAINT c5 FOREIGN KEY(Sno) REFERENCES STUDENT(Sno);(6)查看约束的定义在企业管理器中,选择要查看约束的表,打开表设计器,单击鼠标右键,分别选择“索 弓1/键”、“关系”、“CHECK”命令,可以查看各类约束。(7)删除约束企业管理器方法:在企业管理器的表设计器中,可以删除主键、去掉默认值。单击鼠标右键,分别选择 “索引/键”、“关系”、“CHECK”命令,可以删除各类约束。查询分析器方法:删除约束的 SQL 语句格式为:ALTER TABLE
36、 DROP CONSTRAINT ;例如,删除上例在 JXGL数据库中为SC表的“ Sno”列创建的外键约束。ALTER TABLE SC DROP CONSTRAINT c5;2创建人事关系 RSGX 数据库,并定义职工和部门两个关系模式:职工(职工号,姓名,年龄,职务,工资,部门号) ,其中职工号为主码;部门(部门号,名称,经理名,电话) ,其中部门号为主码;要求在模式中完成以下完整性约束条件的定义:(1) 定义每个模式的主码;(2) 定义参照完整性;(3) 定义职工年龄不得超过60 岁。CREATE TABLE RSGXCREATE TABLE department( Dno char
37、( 12 ) primary key ,Dname char ( 10 ),Dmanager char ( 16 ),Dphone char ( 13 )CREATE TABLE employee( Eno char ( 10 ),Ename char ( 10 ),Eage char ( 6),Eduty char ( 10 ),( Dno),Elaborage char ( 10 ),Dno char ( 10 ) not null foreign key references department check ( Eage =60 ),primary key ( Eno )附录一:实验课
38、考核办法上机实验是数据库系统原理这门课程的重要环节。通过基于关系型网络数据库管理系统 SQL Server 的上机实验,使学生进一步了解关系数据模型及关系数据库管理系统的基本原理和标准的SQL语言的使用。本课程的实验环境:服务器使用WINDOWS000 SERVE臊作系统,并安装 SQLServer2000标准版数据库软件;客户端操作系统为WINDOWS实验方式和基本要求:实验一人一组,要求学生在规定时间内独立完成操作,并在实验结束后提交实验报告。结合实验纪律、出勤情况、实验操作、综合实验报告,分五级给出成绩,评分标准如下:优秀 :出勤满,实验纪律好,听从指导老师指挥,动手能力强,综合试验数据处理正确,报告分析思路清晰,字迹工整。良好 :出勤满,实验纪律好,听从指导老师指挥,动手能力较强,综合试验数据处理正确,报告分析思路清晰,字迹较工整。中等 :出勤满,实验纪律好,听从指导老师指挥,动手能力较强,综合试验数据处理较正确,报告分析思路较清晰,字迹基本工整。及格 :只有少数特殊情况下没有出勤,实验纪律一般,听从指导老师指挥,动手能力一般,综合试验数据处理基本正确,报告分析思路一般。不及格 :经常不参加实验,实验纪律不好;不听从指导老师指挥;动手能力较差;综合试验数据处理不正确;不写实验报告。