实验二数据库的简单查询和连接查询Word文档格式.docx
《实验二数据库的简单查询和连接查询Word文档格式.docx》由会员分享,可在线阅读,更多相关《实验二数据库的简单查询和连接查询Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
开始实验前,必须进行预习,写出实现所有查询要求的SQL语句。
实验过程中,先集中由老师进行具体要求和注意事项的讲解,然后各自独立在机器上完成实验。
实验过程中出现问题,在实验指导老师帮助下解决。
实验原理
1、将查询需求用SQL语言表示。
2、在SQLServer查询分析器的输入区中输入SQL查询语句。
3、设置查询分析器结果区为StandardExecute(标准执行)或ExecutetoGrid方式。
4、发布执行命令,查看查询结果;
如果结果不正确,进行修改,直到正确为止。
5、查询分析器及使用方法
查询分析器是在开发数据库应用系统时使用最多的工具。
查询分析器的主要作用是编辑SQL语句,将其发送到服务器,并将执行结果及分析显示出来(或进行存储)。
查询分析功能主要通过测试查询成本,判断该查询是否需要增加索引以提高查询速度,并可以实现自动建立索引的功能。
在查询分析器中的左边窗口是对象浏览器,其中按树结构列出了数据库对象;
右上方是SQL代码区域,用于输入SQL的查询语句;
右下方为结果区,用于显示查询结果和分析结果。
对于SQL语句的执行结果,在结果区中可以有4中不同的输出形式;
标准执行将结果直接显示在结果区;
网格执行将结果以表格形式显示在结果区;
计划执行显示执行计划;
索引分析为在结果区中显示查询的索引情况。
上述输出形式,可以通过菜单或按钮选择。
实验仪器
(1)硬件条件:
个人计算机。
(2)软件条件:
Windows2000NTServer;
MSSQLServer2000。
实验步骤
1、基本操作实验
(1)简单查询实验
1)用SQl语句表示下列操作,在学生选课库中实现其数据查询操作。
①求数学系学生的学号和姓名。
②求选修了课程的学生学号。
③求选修C1课程的学生学号和成绩,并要求对查询结果按成绩降序排列,如果成绩相同则按学号升序排列。
④求选修课程C1且成绩在80~90分之间的学生学号和成绩,并将成绩乘以系数0.8输出。
⑤求数学系或计算机系姓张的学生的信息。
⑥求缺少了成绩的学生的学号和课程号。
2)在图书读者库中实现其查询操作:
将计算机类的书存入永久的计算机图书表中,将借书日期在2000年以前的借阅记录存入临时的超期借阅表。
(2)连接查询实验
用SQL语句表示,并在学生选课库中实现下列数据连接查询操作:
①查询每个学生的情况以及他所选修的课程。
②求学生的学号、姓名、选修的课程名及成绩。
③求选修C1课程且成绩为90分以上的学生学号、姓名及成绩。
④查询每一门课的间接先行课(即先行课的先行课)。
2、提高操作实验
(1)按如下表的格式,建立职工部门库和职工表、部门表,并向表中输入数据。
职工表(ZG)
职工号(zgh)
姓名(xm)
性别(xb)
年龄(nl)
所在部门(bmh)
1010
李勇
男
20
11
1011
刘晨
女
19
1012
王敏
22
12
1014
张立
21
13
部门表(BM)
部门号(bmh)
部门名称(bmmc)
电话(dh)
生产科
566
计划科
578
一车间
467
14
科研所
(2)用SQL语句表示职工和部门之间的内连接、左外部连接和右外部连接,在职工部门库中实现其数据内连接和各种外查询操作。
实验内容
1、简单查询操作
该实验包括投影、选择条件表达式、数据排序、使用临时表等。
2、连接查询操作
该实验包括等值连接、自然连接、求笛卡儿积、一般连接、外连接、内连接、左连接、右连接和自连接等。
实验数据
①求数学系学生的学号和姓名。
SelectNumber,NamefromStudentwhereAcademy=’数学系’
②求选修了课程的学生学号。
selectNumberfromStudentwhereexists(select*fromSelectionwhereStudent.Number=Selection.Snumber)
或selectdistinctSnumberfromSelection(更加高效)
③求选修C1课程的学生学号和成绩,并要求对查询结果按成绩降序排列,如果成绩相同则按学号升序排列。
selectSnumber,ScorefromSelection,CoursewhereCnumber=NumberandName='
C1'
orderbySnumberasc
④求选修课程C1且成绩在80~90分之间的学生学号和成绩,并将成绩乘以系数0.8输出。
selectSnumber,Score*0.8ScorefromSelection,CoursewhereCnumber=NumberandName='
andScore>
80andScore<
90
⑤求数学系或计算机系姓张的学生的信息。
select*fromStudentwhereNamelike'
张%'
and(Academy='
数学系'
orAcademy='
计算机系'
)
selectSnumber,CnumberfromSelectionwhereScoreisnull
2)在图书读者库中实现其查询操作:
insertintoCB(Number,Name,Category,Press,Author,Price)
selectNumber,Name,Category,Press,Author,PricefromBookwhereCategory='
计算机'
CREATETABLE#TB(
Bnumberchar(20),
Rnumberchar(20),
Bdatedate,
IDchar(10)primarykey)
go
insertinto#TB(Bnumber,Rnumber,Bdate,ID)selectBnumber,Rnumber,Bdate,IDfromBorrowwhere
Bdate<
'
2000/01/01'
①查询每个学生的情况以及他所选修的课程。
select*fromStudentleftjoinSelectionon(Student.Number=Selection.Snumber)
②求学生的学号、姓名、选修的课程名及成绩。
selectStudent.Name,Student.Number,Course.NameCourseName,Selection.ScorefromStudent,Course,SelectionwhereStudent.Number=SnumberandCourse.Number=Cnumber
③求选修C1课程且成绩为90分以上的学生学号、姓名及成绩。
selectStudent.Name,Student.Number,Selection.ScorefromStudent,Course,SelectionwhereStudent.Number=SnumberandCourse.Number=CnumberandCourse.Name='
andscore>
④查询每一门课的间接先行课(即先行课的先行课)。
selectC1.Number,C1.Name,C2.FrontIndirect,C3.NameFCNamefromCourseC1,CourseC2,CourseC3whereC1.Front=C2.NumberandC2.Front=C3.Number
createdatabaseZGBM
useZGBM
createtableZG(
zghchar(4)primarykey,
xmnchar(8),
xbnchar
(1)check(xb='
男'
orxb='
女'
),
nlint,
bmhchar(4)
createtableBM(
bmhchar
(2)primarykey,
bmmcchar(10),
dhchar(5)
内连接:
select*fromZG,BMwhereZG.bmh=BM.bmh
左外部连接:
select*fromZGleftjoinBMon(ZG.bmh=bm.bmh)
右外部连接:
select*fromZGrightjoinBMon(ZG.bmh=bm.bmh)
思考题
1、写出实现所有查询要求的SQL语句。
答:
上述实验数据中已写。
实验总结
实验很简单,只是将书本上的只是进行运用而已,需要注意书上的部分SQL语句和MSSQLSever中的SQL语句的不同。
如leftoutjoin(书)和leftjoin(MSSQLSever)。
指导教师意见
签名:
年月日
注:
各学院可根据教学需要对以上栏目进行增减。
表格内容可根据内容扩充。